From ed4c1443306ba9cfd876cad5676c40bd953a24ea Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Thu, 27 Jun 2024 17:51:36 +0200 Subject: [PATCH] wip --- protocol.md | 45 +++---- src/pb_structs.h | 1 + src/process_transaction.c | 34 +++++ src/proto/protocol.options | 3 +- src/proto/protocol.pb.c | 5 +- src/proto/protocol.pb.h | 15 ++- src/proto/protocol.proto | 1 + src/start_signing_transaction.c | 12 +- src/swap_errors.h | 1 + test/python/apps/bitcoin.py | 19 ++- test/python/apps/bitcoin_client/txmaker.py | 25 +++- test/python/apps/exchange.py | 48 +++---- test/python/apps/exchange_test_runner.py | 124 ++++++++++++++++-- .../apps/exchange_transaction_builder.py | 19 +-- test/python/apps/pb/exchange_pb2.py | 43 +++--- .../00000.png | Bin 0 -> 374 bytes .../00001.png | Bin 0 -> 421 bytes .../00002.png | Bin 0 -> 330 bytes .../00003.png | Bin 0 -> 355 bytes .../00004.png | Bin 0 -> 301 bytes .../00005.png | Bin 0 -> 414 bytes .../00006.png | Bin 0 -> 367 bytes .../00000.png | Bin 0 -> 374 bytes .../00001.png | Bin 0 -> 421 bytes .../00002.png | Bin 0 -> 330 bytes .../00003.png | Bin 0 -> 355 bytes .../00004.png | Bin 0 -> 301 bytes .../00005.png | Bin 0 -> 414 bytes .../00006.png | Bin 0 -> 367 bytes .../00000.png | Bin 0 -> 374 bytes .../00001.png | Bin 0 -> 421 bytes .../00002.png | Bin 0 -> 330 bytes .../00003.png | Bin 0 -> 355 bytes .../00004.png | Bin 0 -> 301 bytes .../00005.png | Bin 0 -> 414 bytes .../00006.png | Bin 0 -> 367 bytes .../test_bitcoin_thorswap_valid_1/00000.png | Bin 0 -> 374 bytes .../test_bitcoin_thorswap_valid_1/00001.png | Bin 0 -> 421 bytes .../test_bitcoin_thorswap_valid_1/00002.png | Bin 0 -> 330 bytes .../test_bitcoin_thorswap_valid_1/00003.png | Bin 0 -> 355 bytes .../test_bitcoin_thorswap_valid_1/00004.png | Bin 0 -> 301 bytes .../test_bitcoin_thorswap_valid_1/00005.png | Bin 0 -> 414 bytes .../test_bitcoin_thorswap_valid_1/00006.png | Bin 0 -> 367 bytes .../test_bitcoin_thorswap_valid_2/00000.png | Bin 0 -> 374 bytes .../test_bitcoin_thorswap_valid_2/00001.png | Bin 0 -> 421 bytes .../test_bitcoin_thorswap_valid_2/00002.png | Bin 0 -> 330 bytes .../test_bitcoin_thorswap_valid_2/00003.png | Bin 0 -> 355 bytes .../test_bitcoin_thorswap_valid_2/00004.png | Bin 0 -> 301 bytes .../test_bitcoin_thorswap_valid_2/00005.png | Bin 0 -> 414 bytes .../test_bitcoin_thorswap_valid_2/00006.png | Bin 0 -> 367 bytes .../00000.png | Bin 0 -> 374 bytes .../00001.png | Bin 0 -> 421 bytes .../00002.png | Bin 0 -> 330 bytes .../00003.png | Bin 0 -> 355 bytes .../00004.png | Bin 0 -> 301 bytes .../00005.png | Bin 0 -> 414 bytes .../00006.png | Bin 0 -> 367 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../test_bitcoin_thorswap_valid_1/00000.png | Bin 0 -> 414 bytes .../test_bitcoin_thorswap_valid_1/00001.png | Bin 0 -> 494 bytes .../test_bitcoin_thorswap_valid_1/00002.png | Bin 0 -> 366 bytes .../test_bitcoin_thorswap_valid_1/00003.png | Bin 0 -> 402 bytes .../test_bitcoin_thorswap_valid_1/00004.png | Bin 0 -> 345 bytes .../test_bitcoin_thorswap_valid_1/00005.png | Bin 0 -> 472 bytes .../test_bitcoin_thorswap_valid_1/00006.png | Bin 0 -> 391 bytes .../test_bitcoin_thorswap_valid_2/00000.png | Bin 0 -> 414 bytes .../test_bitcoin_thorswap_valid_2/00001.png | Bin 0 -> 494 bytes .../test_bitcoin_thorswap_valid_2/00002.png | Bin 0 -> 366 bytes .../test_bitcoin_thorswap_valid_2/00003.png | Bin 0 -> 402 bytes .../test_bitcoin_thorswap_valid_2/00004.png | Bin 0 -> 345 bytes .../test_bitcoin_thorswap_valid_2/00005.png | Bin 0 -> 472 bytes .../test_bitcoin_thorswap_valid_2/00006.png | Bin 0 -> 391 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../test_bitcoin_thorswap_valid_1/00000.png | Bin 0 -> 414 bytes .../test_bitcoin_thorswap_valid_1/00001.png | Bin 0 -> 494 bytes .../test_bitcoin_thorswap_valid_1/00002.png | Bin 0 -> 366 bytes .../test_bitcoin_thorswap_valid_1/00003.png | Bin 0 -> 402 bytes .../test_bitcoin_thorswap_valid_1/00004.png | Bin 0 -> 345 bytes .../test_bitcoin_thorswap_valid_1/00005.png | Bin 0 -> 472 bytes .../test_bitcoin_thorswap_valid_1/00006.png | Bin 0 -> 391 bytes .../test_bitcoin_thorswap_valid_2/00000.png | Bin 0 -> 414 bytes .../test_bitcoin_thorswap_valid_2/00001.png | Bin 0 -> 494 bytes .../test_bitcoin_thorswap_valid_2/00002.png | Bin 0 -> 366 bytes .../test_bitcoin_thorswap_valid_2/00003.png | Bin 0 -> 402 bytes .../test_bitcoin_thorswap_valid_2/00004.png | Bin 0 -> 345 bytes .../test_bitcoin_thorswap_valid_2/00005.png | Bin 0 -> 472 bytes .../test_bitcoin_thorswap_valid_2/00006.png | Bin 0 -> 391 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 494 bytes .../00002.png | Bin 0 -> 366 bytes .../00003.png | Bin 0 -> 402 bytes .../00004.png | Bin 0 -> 345 bytes .../00005.png | Bin 0 -> 472 bytes .../00006.png | Bin 0 -> 391 bytes .../post_sign/00000.png | Bin 0 -> 8199 bytes .../post_sign/00001.png | Bin 0 -> 11566 bytes .../review/00000.png | Bin 0 -> 11407 bytes .../review/00001.png | Bin 0 -> 14356 bytes .../review/00002.png | Bin 0 -> 12258 bytes .../post_sign/00000.png | Bin 0 -> 8199 bytes .../post_sign/00001.png | Bin 0 -> 11566 bytes .../review/00000.png | Bin 0 -> 11407 bytes .../review/00001.png | Bin 0 -> 14356 bytes .../review/00002.png | Bin 0 -> 12258 bytes .../post_sign/00000.png | Bin 0 -> 8199 bytes .../post_sign/00001.png | Bin 0 -> 11566 bytes .../review/00000.png | Bin 0 -> 11407 bytes .../review/00001.png | Bin 0 -> 14356 bytes .../review/00002.png | Bin 0 -> 12258 bytes .../post_sign/00000.png | Bin 0 -> 5153 bytes .../post_sign/00001.png | Bin 0 -> 11566 bytes .../review/00000.png | Bin 0 -> 11407 bytes .../review/00001.png | Bin 0 -> 14356 bytes .../review/00002.png | Bin 0 -> 12258 bytes .../post_sign/00000.png | Bin 0 -> 5153 bytes .../post_sign/00001.png | Bin 0 -> 11566 bytes .../review/00000.png | Bin 0 -> 11407 bytes .../review/00001.png | Bin 0 -> 14356 bytes .../review/00002.png | Bin 0 -> 12258 bytes .../post_sign/00000.png | Bin 0 -> 8199 bytes .../post_sign/00001.png | Bin 0 -> 11566 bytes .../review/00000.png | Bin 0 -> 11407 bytes .../review/00001.png | Bin 0 -> 14356 bytes .../review/00002.png | Bin 0 -> 12258 bytes test/python/test_bitcoin.py | 49 ++++--- test/python/test_ethereum.py | 15 +-- test/python/test_extra_data.py | 94 +++++++++++++ test/python/test_polkadot.py | 9 +- test/python/test_ripple.py | 4 +- test/python/test_solana.py | 9 +- test/python/test_stellar.py | 4 +- test/python/test_tezos.py | 9 +- test/python/test_tron.py | 8 +- 180 files changed, 437 insertions(+), 159 deletions(-) create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00000.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00001.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00002.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00003.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00004.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00005.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00006.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00000.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00001.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00002.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00003.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00004.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00005.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00006.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00000.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00001.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00002.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00003.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00004.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00005.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00006.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00000.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00001.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00002.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00003.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00004.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00005.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00006.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00000.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00001.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00002.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00003.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00004.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00005.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00006.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00000.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00001.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00002.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00003.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00004.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00005.png create mode 100644 test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00006.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00000.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00001.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00002.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00003.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00004.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00005.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00006.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00000.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00001.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00002.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00003.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00004.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00005.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00006.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00000.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00001.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00002.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00003.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00004.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00005.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00006.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00000.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00001.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00002.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00003.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00004.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00005.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00006.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00000.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00001.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00002.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00003.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00004.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00005.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00006.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00000.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00001.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00002.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00003.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00004.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00005.png create mode 100644 test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00006.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00000.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00001.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00002.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00003.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00004.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00005.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00006.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00000.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00001.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00002.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00003.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00004.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00005.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00006.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00000.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00001.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00002.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00003.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00004.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00005.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00006.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00000.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00001.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00002.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00003.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00004.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00005.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00006.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00000.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00001.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00002.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00003.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00004.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00005.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00006.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00000.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00001.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00002.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00003.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00004.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00005.png create mode 100644 test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00006.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/post_sign/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/post_sign/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/review/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/review/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/review/00002.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/post_sign/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/post_sign/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/review/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/review/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/review/00002.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/post_sign/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/post_sign/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/review/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/review/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/review/00002.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/post_sign/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/post_sign/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/review/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/review/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/review/00002.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/post_sign/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/post_sign/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/review/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/review/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/review/00002.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/post_sign/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/post_sign/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/review/00000.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/review/00001.png create mode 100644 test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/review/00002.png create mode 100644 test/python/test_extra_data.py diff --git a/protocol.md b/protocol.md index 9c546074..76537227 100644 --- a/protocol.md +++ b/protocol.md @@ -299,25 +299,26 @@ For all other TYPES, the format of this nonce is a 32 bytes array. Return code can be one of the following values: -| Bytes | Name | Description | -| ------ | ------------------------- | --------------------------------------------------------------------------------------- | -| 0x6A80 | INCORRECT_COMMAND_DATA | The DATA sent does not match the correct format for the COMMAND specified | -| 0x6A81 | DESERIALIZATION_FAILED | Can't parse partner transaction proposal | -| 0x6A82 | WRONG_TRANSACTION_ID | Transaction ID is not equal to one generated on the START_NEW_TRANSACTION step | -| 0x6A83 | INVALID_ADDRESS | Refund or payout address doesn't belong to us | -| 0x6A84 | USER_REFUSED | User refused the transaction proposal | -| 0x6A85 | INTERNAL_ERROR | Internal error of the application | -| 0x6A86 | WRONG_P1 | The P1 value is not a valid RATE | -| 0x6A87 | WRONG_P2_SUBCOMMAND | The P2 lower 4 bits of the P2 byte is not a valid SUBCOMMAND | -| 0x6A88 | WRONG_P2_EXTENSION | The P2 upper 4 bits of the P2 byte is not a valid EXTENSION | -| 0x6A89 | INVALID_P2_EXTENSION | The extension is a valid value but is refused in the current context | -| 0x6A8A | MEMORY_CORRUPTION | A child application started by Exchange has corrupted the Exchange application memory | -| 0x6A8B | AMOUNT_FORMATTING_FAILED | A child application failed to format an amount provided by the partner | -| 0x6A8C | APPLICATION_NOT_INSTALLED | The requested child application is not installed on the device | -| 0x6E00 | CLASS_NOT_SUPPORTED | The CLASS is not 0xE0 | -| 0x6E01 | MALFORMED_APDU | The APDU header is malformed | -| 0x6E02 | INVALID_DATA_LENGTH | The length of the DATA is refused for this COMMAND | -| 0x6D00 | INVALID_INSTRUCTION | COMMAND is not in the "Possible commands" table | -| 0x6D01 | UNEXPECTED_INSTRUCTION | COMMAND is in the "Possible commands" table but is refused in the current context | -| 0x9D1A | SIGN_VERIFICATION_FAIL | The signature sent by this command does not match the data or the associated public key | -| 0x9000 | SUCCESS | Success code | +| Bytes | Name | Description | +| ------ | ---------------------------- | --------------------------------------------------------------------------------------- | +| 0x6A80 | INCORRECT_COMMAND_DATA | The DATA sent does not match the correct format for the COMMAND specified | +| 0x6A81 | DESERIALIZATION_FAILED | Can't parse partner transaction proposal | +| 0x6A82 | WRONG_TRANSACTION_ID | Transaction ID is not equal to one generated on the START_NEW_TRANSACTION step | +| 0x6A83 | INVALID_ADDRESS | Refund or payout address doesn't belong to us | +| 0x6A84 | USER_REFUSED | User refused the transaction proposal | +| 0x6A85 | INTERNAL_ERROR | Internal error of the application | +| 0x6A86 | WRONG_P1 | The P1 value is not a valid RATE | +| 0x6A87 | WRONG_P2_SUBCOMMAND | The P2 lower 4 bits of the P2 byte is not a valid SUBCOMMAND | +| 0x6A88 | WRONG_P2_EXTENSION | The P2 upper 4 bits of the P2 byte is not a valid EXTENSION | +| 0x6A89 | INVALID_P2_EXTENSION | The extension is a valid value but is refused in the current context | +| 0x6A8A | MEMORY_CORRUPTION | A child application started by Exchange has corrupted the Exchange application memory | +| 0x6A8B | AMOUNT_FORMATTING_FAILED | A child application failed to format an amount provided by the partner | +| 0x6A8C | APPLICATION_NOT_INSTALLED | The requested child application is not installed on the device | +| 0x6A8C | WRONG_EXTRA_ID_OR_EXTRA_DATA | The values given for extra_id (memo) and / or extra_data (Thorswap like) are incorrect | +| 0x6E00 | CLASS_NOT_SUPPORTED | The CLASS is not 0xE0 | +| 0x6E01 | MALFORMED_APDU | The APDU header is malformed | +| 0x6E02 | INVALID_DATA_LENGTH | The length of the DATA is refused for this COMMAND | +| 0x6D00 | INVALID_INSTRUCTION | COMMAND is not in the "Possible commands" table | +| 0x6D01 | UNEXPECTED_INSTRUCTION | COMMAND is in the "Possible commands" table but is refused in the current context | +| 0x9D1A | SIGN_VERIFICATION_FAIL | The signature sent by this command does not match the data or the associated public key | +| 0x9000 | SUCCESS | Success code | diff --git a/src/pb_structs.h b/src/pb_structs.h index e4903e78..44c8ed77 100644 --- a/src/pb_structs.h +++ b/src/pb_structs.h @@ -4,3 +4,4 @@ typedef PB_BYTES_ARRAY_T(16) pb_bytes_array_16_t; typedef PB_BYTES_ARRAY_T(32) pb_bytes_array_32_t; +typedef PB_BYTES_ARRAY_T(33) pb_bytes_array_33_t; diff --git a/src/process_transaction.c b/src/process_transaction.c index f573126a..519c631a 100644 --- a/src/process_transaction.c +++ b/src/process_transaction.c @@ -194,6 +194,36 @@ static bool deserialize_protobuf_payload(buf_t payload, return true; } +static bool check_extra_id_extra_data(subcommand_e subcommand) { + if (subcommand == SWAP || subcommand == SWAP_NG) { + pb_bytes_array_33_t *extra = + (pb_bytes_array_33_t *) &G_swap_ctx.swap_transaction.payin_extra_data; + // has_extra_id == extra id string is not 0 sized + bool has_extra_id = (G_swap_ctx.swap_transaction.payin_extra_id[0] != '\0'); + // has_extra_data == extra data is not empty and does not have only one byte NATIVE id (0) + bool has_extra_data = (extra->size != 0 && !(extra->size == 1 && extra->bytes[0] == 0)); + if (has_extra_id && has_extra_data) { + PRINTF("Error: both payin_extra_id '%s' and payin_extra_data '%.*H' received\n", + G_swap_ctx.swap_transaction.payin_extra_id, + extra->size, + extra->bytes); + return false; + } + + if (has_extra_data) { + // Size has to be header + 32 bytes hash + if (extra->size != 33) { + PRINTF("Error: incorrect payin_extra_data size %d != 33; payin_extra_data = %.*H\n", + extra->size, + extra->size, + extra->bytes); + return false; + } + } + } + return true; +} + static bool check_transaction_id(subcommand_e subcommand) { if (subcommand == SWAP) { if (G_swap_ctx.swap_transaction.device_transaction_id[10] != '\0') { @@ -332,6 +362,10 @@ int process_transaction(const command_t *cmd) { return reply_error(DESERIALIZATION_FAILED); } + if (!check_extra_id_extra_data(cmd->subcommand)) { + return reply_error(WRONG_EXTRA_ID_OR_EXTRA_DATA); + } + if (!check_transaction_id(cmd->subcommand)) { return reply_error(WRONG_TRANSACTION_ID); } diff --git a/src/proto/protocol.options b/src/proto/protocol.options index 0f878ded..eb0be592 100644 --- a/src/proto/protocol.options +++ b/src/proto/protocol.options @@ -1,5 +1,6 @@ ledger_swap.NewTransactionResponse.payin_address max_size:63; -ledger_swap.NewTransactionResponse.payin_extra_id max_size:33; +ledger_swap.NewTransactionResponse.payin_extra_id max_size:20; +ledger_swap.NewTransactionResponse.payin_extra_data max_size:33; ledger_swap.NewTransactionResponse.refund_address max_size:63; ledger_swap.NewTransactionResponse.refund_extra_id max_size:20; ledger_swap.NewTransactionResponse.payout_address max_size:63; diff --git a/src/proto/protocol.pb.c b/src/proto/protocol.pb.c index af222647..4bea6dcf 100644 --- a/src/proto/protocol.pb.c +++ b/src/proto/protocol.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.3.9 at Thu Jun 20 13:57:59 2024. */ +/* Generated by nanopb-0.3.9 at Mon Jun 24 15:05:18 2024. */ #include "protocol.pb.h" @@ -10,7 +10,7 @@ -const pb_field_t ledger_swap_NewTransactionResponse_fields[13] = { +const pb_field_t ledger_swap_NewTransactionResponse_fields[14] = { PB_FIELD( 1, STRING , SINGULAR, STATIC , FIRST, ledger_swap_NewTransactionResponse, payin_address, payin_address, 0), PB_FIELD( 2, STRING , SINGULAR, STATIC , OTHER, ledger_swap_NewTransactionResponse, payin_extra_id, payin_address, 0), PB_FIELD( 3, STRING , SINGULAR, STATIC , OTHER, ledger_swap_NewTransactionResponse, refund_address, payin_extra_id, 0), @@ -23,6 +23,7 @@ const pb_field_t ledger_swap_NewTransactionResponse_fields[13] = { PB_FIELD( 10, BYTES , SINGULAR, STATIC , OTHER, ledger_swap_NewTransactionResponse, amount_to_wallet, amount_to_provider, 0), PB_FIELD( 11, STRING , SINGULAR, STATIC , OTHER, ledger_swap_NewTransactionResponse, device_transaction_id, amount_to_wallet, 0), PB_FIELD( 12, BYTES , SINGULAR, STATIC , OTHER, ledger_swap_NewTransactionResponse, device_transaction_id_ng, device_transaction_id, 0), + PB_FIELD( 13, BYTES , SINGULAR, STATIC , OTHER, ledger_swap_NewTransactionResponse, payin_extra_data, device_transaction_id_ng, 0), PB_LAST_FIELD }; diff --git a/src/proto/protocol.pb.h b/src/proto/protocol.pb.h index 86653ec3..1bb13cf1 100644 --- a/src/proto/protocol.pb.h +++ b/src/proto/protocol.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.9 at Thu Jun 20 13:57:59 2024. */ +/* Generated by nanopb-0.3.9 at Mon Jun 24 15:05:18 2024. */ #ifndef PB_LEDGER_SWAP_PROTOCOL_PB_H_INCLUDED #define PB_LEDGER_SWAP_PROTOCOL_PB_H_INCLUDED @@ -27,12 +27,13 @@ typedef struct _ledger_swap_NewFundResponse { /* @@protoc_insertion_point(struct:ledger_swap_NewFundResponse) */ } ledger_swap_NewFundResponse; +typedef PB_BYTES_ARRAY_T(33) ledger_swap_NewTransactionResponse_payin_extra_data_t; typedef PB_BYTES_ARRAY_T(16) ledger_swap_NewTransactionResponse_amount_to_provider_t; typedef PB_BYTES_ARRAY_T(16) ledger_swap_NewTransactionResponse_amount_to_wallet_t; typedef PB_BYTES_ARRAY_T(32) ledger_swap_NewTransactionResponse_device_transaction_id_ng_t; typedef struct _ledger_swap_NewTransactionResponse { char payin_address[63]; - char payin_extra_id[33]; + char payin_extra_id[20]; char refund_address[63]; char refund_extra_id[20]; char payout_address[63]; @@ -43,6 +44,7 @@ typedef struct _ledger_swap_NewTransactionResponse { ledger_swap_NewTransactionResponse_amount_to_wallet_t amount_to_wallet; char device_transaction_id[11]; ledger_swap_NewTransactionResponse_device_transaction_id_ng_t device_transaction_id_ng; + ledger_swap_NewTransactionResponse_payin_extra_data_t payin_extra_data; /* @@protoc_insertion_point(struct:ledger_swap_NewTransactionResponse) */ } ledger_swap_NewTransactionResponse; @@ -69,11 +71,11 @@ typedef struct _ledger_swap_NewSellResponse { /* Default values for struct fields */ /* Initializer values for message structs */ -#define ledger_swap_NewTransactionResponse_init_default {"", "", "", "", "", "", "", "", {0, {0}}, {0, {0}}, "", {0, {0}}} +#define ledger_swap_NewTransactionResponse_init_default {"", "", "", "", "", "", "", "", {0, {0}}, {0, {0}}, "", {0, {0}}, {0, {0}}} #define ledger_swap_UDecimal_init_default {{0, {0}}, 0} #define ledger_swap_NewSellResponse_init_default {"", "", {0, {0}}, "", "", ledger_swap_UDecimal_init_default, {0, {0}}} #define ledger_swap_NewFundResponse_init_default {"", "", "", {0, {0}}, "", {0, {0}}} -#define ledger_swap_NewTransactionResponse_init_zero {"", "", "", "", "", "", "", "", {0, {0}}, {0, {0}}, "", {0, {0}}} +#define ledger_swap_NewTransactionResponse_init_zero {"", "", "", "", "", "", "", "", {0, {0}}, {0, {0}}, "", {0, {0}}, {0, {0}}} #define ledger_swap_UDecimal_init_zero {{0, {0}}, 0} #define ledger_swap_NewSellResponse_init_zero {"", "", {0, {0}}, "", "", ledger_swap_UDecimal_init_zero, {0, {0}}} #define ledger_swap_NewFundResponse_init_zero {"", "", "", {0, {0}}, "", {0, {0}}} @@ -87,6 +89,7 @@ typedef struct _ledger_swap_NewSellResponse { #define ledger_swap_NewFundResponse_device_transaction_id_tag 6 #define ledger_swap_NewTransactionResponse_payin_address_tag 1 #define ledger_swap_NewTransactionResponse_payin_extra_id_tag 2 +#define ledger_swap_NewTransactionResponse_payin_extra_data_tag 13 #define ledger_swap_NewTransactionResponse_refund_address_tag 3 #define ledger_swap_NewTransactionResponse_refund_extra_id_tag 4 #define ledger_swap_NewTransactionResponse_payout_address_tag 5 @@ -108,13 +111,13 @@ typedef struct _ledger_swap_NewSellResponse { #define ledger_swap_NewSellResponse_device_transaction_id_tag 7 /* Struct field encoding specification for nanopb */ -extern const pb_field_t ledger_swap_NewTransactionResponse_fields[13]; +extern const pb_field_t ledger_swap_NewTransactionResponse_fields[14]; extern const pb_field_t ledger_swap_UDecimal_fields[3]; extern const pb_field_t ledger_swap_NewSellResponse_fields[8]; extern const pb_field_t ledger_swap_NewFundResponse_fields[7]; /* Maximum encoded size of messages (where known) */ -#define ledger_swap_NewTransactionResponse_size 381 +#define ledger_swap_NewTransactionResponse_size 403 #define ledger_swap_UDecimal_size 24 #define ledger_swap_NewSellResponse_size 219 #define ledger_swap_NewFundResponse_size 233 diff --git a/src/proto/protocol.proto b/src/proto/protocol.proto index 8e653ec5..ca857f1c 100644 --- a/src/proto/protocol.proto +++ b/src/proto/protocol.proto @@ -4,6 +4,7 @@ package ledger_swap; message NewTransactionResponse { string payin_address = 1; string payin_extra_id = 2; + bytes payin_extra_data = 13; string refund_address = 3; string refund_extra_id = 4; string payout_address = 5; diff --git a/src/start_signing_transaction.c b/src/start_signing_transaction.c index affc92be..beef8267 100644 --- a/src/start_signing_transaction.c +++ b/src/start_signing_transaction.c @@ -30,7 +30,17 @@ int start_signing_transaction(const command_t *cmd) { lib_in_out_params.amount = G_swap_ctx.swap_transaction.amount_to_provider.bytes; lib_in_out_params.amount_length = G_swap_ctx.swap_transaction.amount_to_provider.size; lib_in_out_params.destination_address = G_swap_ctx.swap_transaction.payin_address; - lib_in_out_params.destination_address_extra_id = G_swap_ctx.swap_transaction.payin_extra_id; + if (G_swap_ctx.swap_transaction.payin_extra_data.size == 33) { + PRINTF("Using extra data %.*H\n", + G_swap_ctx.swap_transaction.payin_extra_data.size, + G_swap_ctx.swap_transaction.payin_extra_data.bytes); + lib_in_out_params.destination_address_extra_id = + (char *) G_swap_ctx.swap_transaction.payin_extra_data.bytes; + } else { + PRINTF("Using native payin_extra_id %s\n", G_swap_ctx.swap_transaction.payin_extra_id); + lib_in_out_params.destination_address_extra_id = + G_swap_ctx.swap_transaction.payin_extra_id; + } } if (cmd->subcommand == SELL || cmd->subcommand == SELL_NG) { diff --git a/src/swap_errors.h b/src/swap_errors.h index 64e99cb5..adb37cf8 100644 --- a/src/swap_errors.h +++ b/src/swap_errors.h @@ -20,6 +20,7 @@ typedef enum { MEMORY_CORRUPTION = 0x6A8A, AMOUNT_FORMATTING_FAILED = 0x6A8B, APPLICATION_NOT_INSTALLED = 0x6A8C, + WRONG_EXTRA_ID_OR_EXTRA_DATA = 0x6A8D, CLASS_NOT_SUPPORTED = 0x6E00, MALFORMED_APDU = 0x6E01, INVALID_DATA_LENGTH = 0x6E02, diff --git a/test/python/apps/bitcoin.py b/test/python/apps/bitcoin.py index 32cbef94..fc07ba54 100644 --- a/test/python/apps/bitcoin.py +++ b/test/python/apps/bitcoin.py @@ -1,4 +1,5 @@ import sys +from typing import Optional from enum import IntEnum from pathlib import Path from ragger.utils import create_currency_config @@ -30,10 +31,22 @@ def __init__(self, backend: BackendInterface): self._backend.whitelisted_status = [0x9000, 0xE000] self.client = createClient(backend, chain=CHAIN, debug=True) - def send_simple_sign_tx(self, in_wallet: WalletPolicy, fees: int, destination: WalletPolicy, send_amount: int) -> RAPDU: + def send_simple_sign_tx(self, in_wallet: WalletPolicy, fees: int, destination: WalletPolicy, send_amount: int, *, opreturn_data: Optional[bytes] = None) -> RAPDU: in_amounts = [send_amount + fees] - out_amounts = [send_amount] - psbt = createPsbt(in_wallet, in_amounts, out_amounts, [False], [destination]) + + # Prepend one opreturn data if needed with amount 0 + if opreturn_data is not None: + out_amounts = [0, send_amount] + output_is_change = [False, False] + output_wallet = [None, destination] + output_opreturn_data = [opreturn_data, None] + else: + out_amounts = [send_amount] + output_is_change = [False] + output_wallet = [destination] + output_opreturn_data = [None] + + psbt = createPsbt(in_wallet, in_amounts, out_amounts, output_is_change, output_wallet=output_wallet, output_opreturn_data=output_opreturn_data) self.client.sign_psbt(psbt, in_wallet, None) def get_address_from_wallet(wallet: WalletPolicy): diff --git a/test/python/apps/bitcoin_client/txmaker.py b/test/python/apps/bitcoin_client/txmaker.py index 4be633b8..1c8a7cb5 100644 --- a/test/python/apps/bitcoin_client/txmaker.py +++ b/test/python/apps/bitcoin_client/txmaker.py @@ -116,12 +116,15 @@ def createFakeWalletTransaction(n_inputs: int, n_outputs: int, output_amount: in return tx, selected_output_index, selected_output_change, selected_output_address_index -def createPsbt(wallet: WalletPolicy, input_amounts: List[int], output_amounts: List[int], output_is_change: List[bool], output_wallet: Optional[List[Optional[WalletPolicy]]] = None) -> PSBT: +def createPsbt(wallet: WalletPolicy, input_amounts: List[int], output_amounts: List[int], output_is_change: List[bool], output_wallet: Optional[List[Optional[WalletPolicy]]] = None, output_opreturn_data: Optional[List[Optional[bytes]]] = None) -> PSBT: if output_wallet is None: output_wallet = [None] * len(output_amounts) + if output_opreturn_data is None: + output_opreturn_data = [None] * len(output_amounts) assert len(output_amounts) == len(output_is_change) assert len(output_amounts) == len(output_wallet) + assert len(output_amounts) <= len(output_opreturn_data) assert sum(output_amounts) <= sum(input_amounts) # TODO: add support for wrapped segwit wallets @@ -205,13 +208,21 @@ def createPsbt(wallet: WalletPolicy, input_amounts: List[int], output_amounts: L raise RuntimeError("Unexpected state: unknown transaction type") for i, output_amount in enumerate(output_amounts): + assert (output_opreturn_data[i] is None or output_is_change[i] == False) + wallet_i = output_wallet[i] - if output_is_change[i] or wallet_i is None: - script = getScriptPubkeyFromWallet(wallet, output_is_change[i], i) + if wallet_i is None: + if output_is_change[i]: + script_data = getScriptPubkeyFromWallet(wallet, change=output_is_change[i], address_index=i).data + elif output_opreturn_data[i] is not None: + script_data = bytes([0x6a, len(output_opreturn_data[i])]) + output_opreturn_data[i] + else: + assert False else: - script = getScriptPubkeyFromWallet(wallet_i, 0, i) + script_data = getScriptPubkeyFromWallet(wallet_i, change=False, address_index=0).data + print(script_data) - tx.vout[i].scriptPubKey = script.data + tx.vout[i].scriptPubKey = script_data tx.vout[i].nValue = output_amount if output_is_change[i]: @@ -231,6 +242,10 @@ def createPsbt(wallet: WalletPolicy, input_amounts: List[int], output_amounts: L psbt.outputs[i].tap_bip32_paths[tweaked_key] = ( list(), KeyOriginInfo(master_key_fpr, path)) + if output_opreturn_data[i] is not None: + assert output_amount == 0 + assert 2 <= len(output_opreturn_data[i]) <= 75 + psbt.tx = tx return psbt diff --git a/test/python/apps/exchange.py b/test/python/apps/exchange.py index 91a2779a..279da076 100644 --- a/test/python/apps/exchange.py +++ b/test/python/apps/exchange.py @@ -12,7 +12,6 @@ P2_EXTEND = 0x01 << 4 P2_MORE = 0x02 << 4 - class Command(IntEnum): GET_VERSION = 0x02 START_NEW_TRANSACTION = 0x03 @@ -36,27 +35,32 @@ class Rate(IntEnum): class Errors(IntEnum): - INCORRECT_COMMAND_DATA = 0x6A80 - DESERIALIZATION_FAILED = 0x6A81 - WRONG_TRANSACTION_ID = 0x6A82 - INVALID_ADDRESS = 0x6A83 - USER_REFUSED = 0x6A84 - INTERNAL_ERROR = 0x6A85 - WRONG_P1 = 0x6A86 - WRONG_P2_SUBCOMMAND = 0x6A87 - WRONG_P2_EXTENSION = 0x6A88 - INVALID_P2_EXTENSION = 0x6A89 - MEMORY_CORRUPTION = 0x6A8A - AMOUNT_FORMATTING_FAILED = 0x6A8B - APPLICATION_NOT_INSTALLED = 0x6A8C - CLASS_NOT_SUPPORTED = 0x6E00 - MALFORMED_APDU = 0x6E01 - INVALID_DATA_LENGTH = 0x6E02 - INVALID_INSTRUCTION = 0x6D00 - UNEXPECTED_INSTRUCTION = 0x6D01 - SIGN_VERIFICATION_FAIL = 0x9D1A - SUCCESS = 0x9000 - + INCORRECT_COMMAND_DATA = 0x6A80 + DESERIALIZATION_FAILED = 0x6A81 + WRONG_TRANSACTION_ID = 0x6A82 + INVALID_ADDRESS = 0x6A83 + USER_REFUSED = 0x6A84 + INTERNAL_ERROR = 0x6A85 + WRONG_P1 = 0x6A86 + WRONG_P2_SUBCOMMAND = 0x6A87 + WRONG_P2_EXTENSION = 0x6A88 + INVALID_P2_EXTENSION = 0x6A89 + MEMORY_CORRUPTION = 0x6A8A + AMOUNT_FORMATTING_FAILED = 0x6A8B + APPLICATION_NOT_INSTALLED = 0x6A8C + WRONG_EXTRA_ID_OR_EXTRA_DATA = 0x6A8D + CLASS_NOT_SUPPORTED = 0x6E00 + MALFORMED_APDU = 0x6E01 + INVALID_DATA_LENGTH = 0x6E02 + INVALID_INSTRUCTION = 0x6D00 + UNEXPECTED_INSTRUCTION = 0x6D01 + SIGN_VERIFICATION_FAIL = 0x9D1A + SUCCESS = 0x9000 + +class PayinExtraDataID(IntEnum): + NATIVE = 0x00 + EVM_CALLDATA = 0x01 + OP_RETURN = 0x02 EXCHANGE_CLASS = 0xE0 diff --git a/test/python/apps/exchange_test_runner.py b/test/python/apps/exchange_test_runner.py index 78a7e2dd..1efb3585 100644 --- a/test/python/apps/exchange_test_runner.py +++ b/test/python/apps/exchange_test_runner.py @@ -1,5 +1,5 @@ import pytest -from typing import Optional, Tuple +from typing import Optional, Tuple, List from ragger.backend import RaisePolicy from ragger.utils import RAPDU @@ -21,26 +21,34 @@ class ExchangeTestRunner: # You will need to define the following elements in the child application: # currency_configuration: CurrencyConfiguration # valid_destination_1: str - # valid_destination_memo_1: str # valid_destination_2: str - # valid_destination_memo_2: str # valid_refund: str - # valid_refund_memo: str # valid_send_amount_1: int # valid_send_amount_2: int # valid_fees_1: int # valid_fees_2: int # fake_refund: str - # fake_refund_memo: str # fake_payout: str - # fake_payout_memo: str - # + + # Values to overwrite if your application uses memo + valid_destination_memo_1: str = "" + valid_destination_memo_2: str = "" + valid_refund_memo: str = "" + fake_refund_memo: str = "" + fake_payout_memo: str = "" + + # Values to overwrite if your application supports extra_data + valid_payin_extra_data_1: bytes = b"" + valid_payin_extra_data_2: bytes = b"" + invalid_payin_extra_data: bytes = b"" + # signature_refusal_error_code: int # # you can override signature_refusal_error_code with specific values # wrong_method_error_code: int # wrong_fees_error_code: int # wrong_memo_error_code: int + # wrong_extra_data_error_code: int # wrong_destination_error_code: int # wrong_amount_error_code: int @@ -56,6 +64,7 @@ class ExchangeTestRunner: wrong_method_error_code = None wrong_fees_error_code = None wrong_memo_error_code = None + wrong_extra_data_error_code = None wrong_destination_error_code = None wrong_amount_error_code = None @@ -69,6 +78,8 @@ def __init__(self, backend, exchange_navigation_helper): self.wrong_fees_error_code = self.signature_refusal_error_code if self.wrong_memo_error_code is None: self.wrong_memo_error_code = self.signature_refusal_error_code + if self.wrong_extra_data_error_code is None: + self.wrong_extra_data_error_code = self.signature_refusal_error_code if self.wrong_destination_error_code is None: self.wrong_destination_error_code = self.signature_refusal_error_code if self.wrong_amount_error_code is None: @@ -129,14 +140,15 @@ def _perform_valid_exchange(self, subcommand, tx_infos, from_currency_configurat self.exchange_navigation_helper.wait_for_library_spinner() - def perform_valid_swap_from_custom(self, destination, send_amount, fees, memo, refund_address=None, refund_memo=None, ui_validation=True): + def perform_valid_swap_from_custom(self, destination, send_amount, fees, destination_memo, refund_address=None, refund_memo=None, ui_validation=True): + # Refund data is almost always 'valid', make it optionnal to specify it refund_address = self.valid_refund if refund_address is None else refund_address refund_memo = self.valid_refund_memo if refund_memo is None else refund_memo tx_infos = { "payin_address": destination, - "payin_extra_id": memo, + "payin_extra_id": destination_memo, "refund_address": refund_address, - "refund_extra_id": refund_memo.encode(), + "refund_extra_id": refund_memo, "payout_address": b"0xDad77910DbDFdE764fC21FCD4E74D71bBACA6D8D", # Default "payout_extra_id": b"", # Default "currency_from": self.currency_configuration.ticker, @@ -146,14 +158,30 @@ def perform_valid_swap_from_custom(self, destination, send_amount, fees, memo, r } self._perform_valid_exchange(SubCommand.SWAP_NG, tx_infos, self.currency_configuration, cal.ETH_CURRENCY_CONFIGURATION, fees, ui_validation=ui_validation) - def perform_valid_swap_to_custom(self, destination, send_amount, fees, memo, ui_validation=True): + def perform_valid_thorswap_from_custom(self, destination, send_amount, fees, payin_extra_data, refund_address=None, ui_validation=True): + refund_address = self.valid_refund if refund_address is None else refund_address + tx_infos = { + "payin_address": destination, + "payin_extra_data": payin_extra_data, + "refund_address": refund_address, + "refund_extra_id": b"", + "payout_address": b"0xDad77910DbDFdE764fC21FCD4E74D71bBACA6D8D", # Default + "payout_extra_id": b"", + "currency_from": self.currency_configuration.ticker, + "currency_to": cal.ETH_CURRENCY_CONFIGURATION.ticker, + "amount_to_provider": int_to_minimally_sized_bytes(send_amount), + "amount_to_wallet": b"\246\333t\233+\330\000", # Default + } + self._perform_valid_exchange(SubCommand.SWAP_NG, tx_infos, self.currency_configuration, cal.ETH_CURRENCY_CONFIGURATION, fees, ui_validation=ui_validation) + + def perform_valid_swap_to_custom(self, destination, send_amount, fees, destination_memo, ui_validation=True): tx_infos = { "payin_address": "0xDad77910DbDFdE764fC21FCD4E74D71bBACA6D8D", # Default "payin_extra_id": "", # Default "refund_address": "0xDad77910DbDFdE764fC21FCD4E74D71bBACA6D8D", # Default "refund_extra_id": "", # Default "payout_address": destination, - "payout_extra_id": memo.encode(), + "payout_extra_id": destination_memo, "currency_from": cal.ETH_CURRENCY_CONFIGURATION.ticker, "currency_to": self.currency_configuration.ticker, "amount_to_provider": int_to_minimally_sized_bytes(send_amount), @@ -200,6 +228,10 @@ def assert_exchange_is_started(self): # We don't care at all for the subcommand / rate ExchangeClient(self.backend, Rate.FIXED, SubCommand.SWAP_NG).assert_exchange_is_started() + def skip_thorswap_if_needed(self): + if self.backend.firmware.device == "nanos": + pytest.skip("Thorswap is not implemented on Nanos") + ######################################################### # Generic SWAP tests functions, call them in your tests # ######################################################### @@ -271,6 +303,54 @@ def perform_test_swap_wrong_amount(self): assert e.value.status == self.wrong_amount_error_code self.assert_exchange_is_started() + ####################################################################### + # Thorswap / LiFi / ... SWAP tests functions, call them in your tests # + ####################################################################### + + def perform_test_thorswap_valid_1(self): + self.skip_thorswap_if_needed() + self.perform_valid_thorswap_from_custom(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_1) + self.perform_coin_specific_final_tx(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_1) + self.assert_exchange_is_started() + + def perform_test_thorswap_valid_2(self): + self.skip_thorswap_if_needed() + self.perform_valid_thorswap_from_custom(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_2) + self.perform_coin_specific_final_tx(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_2) + self.assert_exchange_is_started() + + def perform_test_thorswap_wrong_hash(self): + self.skip_thorswap_if_needed() + self.perform_valid_thorswap_from_custom(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_1) + with pytest.raises(ExceptionRAPDU) as e: + self.perform_coin_specific_final_tx(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_2) + assert e.value.status == self.wrong_extra_data_error_code + self.assert_exchange_is_started() + + def perform_test_thorswap_invalid_type(self): + self.skip_thorswap_if_needed() + self.perform_valid_thorswap_from_custom(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.invalid_payin_extra_data) + with pytest.raises(ExceptionRAPDU) as e: + self.perform_coin_specific_final_tx(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.invalid_payin_extra_data) + assert e.value.status == self.wrong_extra_data_error_code + self.assert_exchange_is_started() + + def perform_test_thorswap_unexpected_extra_data(self): + self.skip_thorswap_if_needed() + self.perform_valid_swap_from_custom(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, "") + with pytest.raises(ExceptionRAPDU) as e: + self.perform_coin_specific_final_tx(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_1) + assert e.value.status == self.wrong_extra_data_error_code + self.assert_exchange_is_started() + + def perform_test_thorswap_missing_extra_data(self): + self.skip_thorswap_if_needed() + self.perform_valid_thorswap_from_custom(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, self.valid_payin_extra_data_1) + with pytest.raises(ExceptionRAPDU) as e: + self.perform_coin_specific_final_tx(self.valid_destination_1, self.valid_send_amount_1, self.valid_fees_1, None) + assert e.value.status == self.wrong_extra_data_error_code + self.assert_exchange_is_started() + ######################################################### # Generic FUND tests functions, call them in your tests # ######################################################### @@ -377,11 +457,27 @@ def perform_test_sell_wrong_amount(self): _all_test_methods_prefixed = [method for method in dir(ExchangeTestRunner) if method.startswith(TEST_METHOD_PREFIX)] # Remove prefix to have nice snapshots directories ALL_TESTS = [str(i).replace(TEST_METHOD_PREFIX, '') for i in _all_test_methods_prefixed] - ALL_TESTS_EXCEPT_MEMO = [test for test in ALL_TESTS if not "memo" in test] +ALL_TESTS_EXCEPT_THORSWAP = [test for test in ALL_TESTS if not "thorswap" in test] ALL_TESTS_EXCEPT_FEES = [test for test in ALL_TESTS if not "fees" in test] -ALL_TESTS_EXCEPT_MEMO_AND_FEES = [test for test in ALL_TESTS if (not "memo" in test and not "fees" in test)] SWAP_TESTS = [test for test in ALL_TESTS if "swap" in test] FUND_TESTS = [test for test in ALL_TESTS if "fund" in test] SELL_TESTS = [test for test in ALL_TESTS if "sell" in test] VALID_TESTS = [test for test in ALL_TESTS if "valid" in test] + +def common_part(a, b) -> List: + a_set = set(a) + b_set = set(b) + + # check length + if len(a_set.intersection(b_set)) > 0: + return list(a_set.intersection(b_set)) + else: + return [] + + +ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP = common_part(ALL_TESTS_EXCEPT_MEMO, ALL_TESTS_EXCEPT_THORSWAP) +ALL_TESTS_EXCEPT_MEMO_AND_FEES = common_part(ALL_TESTS_EXCEPT_MEMO, ALL_TESTS_EXCEPT_FEES) +ALL_TESTS_EXCEPT_THORSWAP_AND_FEES = common_part(ALL_TESTS_EXCEPT_THORSWAP, ALL_TESTS_EXCEPT_FEES) +ALL_TESTS_EXCEPT_MEMO_THORSWAP_AND_FEES = common_part(ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP, ALL_TESTS_EXCEPT_FEES) +SWAP_TESTS_EXCEPT_THORSWAP = common_part(SWAP_TESTS, ALL_TESTS_EXCEPT_THORSWAP) diff --git a/test/python/apps/exchange_transaction_builder.py b/test/python/apps/exchange_transaction_builder.py index 954508d1..86bbccfc 100644 --- a/test/python/apps/exchange_transaction_builder.py +++ b/test/python/apps/exchange_transaction_builder.py @@ -52,7 +52,7 @@ class SubCommandSpecs: signature_encoding: SignatureEncoding payload_encoding: PayloadEncoding transaction_type: Callable - required_fields: Iterable[str] + possible_fields: Iterable[str] transaction_id_field: str @property @@ -72,7 +72,9 @@ def size_of_transaction_length(self): return (2 if self.is_ng else 1) def check_conf(self, conf: Dict) -> bool: - return (all(i in conf for i in self.required_fields) and (len(conf) == len(self.required_fields))) + # No unknow memmbers in the Dict + # We accept crafting pb with missing fields + return all(key in self.possible_fields for key in conf) def format_transaction(self, transaction: bytes) -> bytes: if self.signature_computation == SignatureComputation.DOT_PREFIXED_BASE_64_URL: @@ -100,6 +102,7 @@ def create_transaction(self, conf: Dict, transaction_id: bytes) -> bytes: # Alter a copy of conf to not modify the actual conf c = conf.copy() c[self.transaction_id_field] = transaction_id + print(self.transaction_type(**c)) raw_transaction = self.transaction_type(**c).SerializeToString() return self.encode_payload(raw_transaction) @@ -127,7 +130,7 @@ def encode_transaction_signature(self, signer: SigningAuthority, tx: bytes) -> b signature_encoding = SignatureEncoding.PLAIN_R_S, payload_encoding = PayloadEncoding.BASE_64_URL, transaction_type = NewTransactionResponse, - required_fields = ["payin_address", "payin_extra_id", "refund_address", "refund_extra_id", + possible_fields = ["payin_address", "payin_extra_id", "payin_extra_data", "refund_address", "refund_extra_id", "payout_address", "payout_extra_id", "currency_from", "currency_to", "amount_to_provider", "amount_to_wallet"], transaction_id_field = "device_transaction_id_ng", @@ -140,7 +143,7 @@ def encode_transaction_signature(self, signer: SigningAuthority, tx: bytes) -> b signature_encoding = SignatureEncoding.DER, payload_encoding = PayloadEncoding.BYTES_ARRAY, transaction_type = NewTransactionResponse, - required_fields = ["payin_address", "payin_extra_id", "refund_address", "refund_extra_id", + possible_fields = ["payin_address", "payin_extra_id", "payin_extra_data", "refund_address", "refund_extra_id", "payout_address", "payout_extra_id", "currency_from", "currency_to", "amount_to_provider", "amount_to_wallet"], transaction_id_field = "device_transaction_id", @@ -154,7 +157,7 @@ def encode_transaction_signature(self, signer: SigningAuthority, tx: bytes) -> b payload_encoding = PayloadEncoding.BASE_64_URL, transaction_type = NewSellResponse, transaction_id_field = "device_transaction_id", - required_fields = ["trader_email", "in_currency", "in_amount", "in_address", "out_currency", "out_amount"], + possible_fields = ["trader_email", "in_currency", "in_amount", "in_address", "out_currency", "out_amount"], ) SELL_SPECS = SubCommandSpecs( @@ -165,7 +168,7 @@ def encode_transaction_signature(self, signer: SigningAuthority, tx: bytes) -> b payload_encoding = PayloadEncoding.BASE_64_URL, transaction_type = NewSellResponse, transaction_id_field = "device_transaction_id", - required_fields = ["trader_email", "in_currency", "in_amount", "in_address", "out_currency", "out_amount"], + possible_fields = ["trader_email", "in_currency", "in_amount", "in_address", "out_currency", "out_amount"], ) FUND_NG_SPECS = SubCommandSpecs( @@ -175,7 +178,7 @@ def encode_transaction_signature(self, signer: SigningAuthority, tx: bytes) -> b signature_encoding = SignatureEncoding.PLAIN_R_S, payload_encoding = PayloadEncoding.BASE_64_URL, transaction_type = NewFundResponse, - required_fields = ["user_id", "account_name", "in_currency", "in_amount", "in_address"], + possible_fields = ["user_id", "account_name", "in_currency", "in_amount", "in_address"], transaction_id_field = "device_transaction_id", ) @@ -186,7 +189,7 @@ def encode_transaction_signature(self, signer: SigningAuthority, tx: bytes) -> b signature_encoding = SignatureEncoding.DER, payload_encoding = PayloadEncoding.BASE_64_URL, transaction_type = NewFundResponse, - required_fields = ["user_id", "account_name", "in_currency", "in_amount", "in_address"], + possible_fields = ["user_id", "account_name", "in_currency", "in_amount", "in_address"], transaction_id_field = "device_transaction_id", ) diff --git a/test/python/apps/pb/exchange_pb2.py b/test/python/apps/pb/exchange_pb2.py index 9313ae5f..540e1db1 100644 --- a/test/python/apps/pb/exchange_pb2.py +++ b/test/python/apps/pb/exchange_pb2.py @@ -19,7 +19,7 @@ syntax='proto3', serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x18src/proto/protocol.proto\x12\x0bledger_swap\"\xcc\x02\n\x16NewTransactionResponse\x12\x15\n\rpayin_address\x18\x01 \x01(\t\x12\x16\n\x0epayin_extra_id\x18\x02 \x01(\t\x12\x16\n\x0erefund_address\x18\x03 \x01(\t\x12\x17\n\x0frefund_extra_id\x18\x04 \x01(\t\x12\x16\n\x0epayout_address\x18\x05 \x01(\t\x12\x17\n\x0fpayout_extra_id\x18\x06 \x01(\t\x12\x15\n\rcurrency_from\x18\x07 \x01(\t\x12\x13\n\x0b\x63urrency_to\x18\x08 \x01(\t\x12\x1a\n\x12\x61mount_to_provider\x18\t \x01(\x0c\x12\x18\n\x10\x61mount_to_wallet\x18\n \x01(\x0c\x12\x1d\n\x15\x64\x65vice_transaction_id\x18\x0b \x01(\t\x12 \n\x18\x64\x65vice_transaction_id_ng\x18\x0c \x01(\x0c\"1\n\x08UDecimal\x12\x13\n\x0b\x63oefficient\x18\x01 \x01(\x0c\x12\x10\n\x08\x65xponent\x18\x02 \x01(\r\"\xc3\x01\n\x0fNewSellResponse\x12\x14\n\x0ctrader_email\x18\x01 \x01(\t\x12\x13\n\x0bin_currency\x18\x02 \x01(\t\x12\x11\n\tin_amount\x18\x03 \x01(\x0c\x12\x12\n\nin_address\x18\x04 \x01(\t\x12\x14\n\x0cout_currency\x18\x05 \x01(\t\x12)\n\nout_amount\x18\x06 \x01(\x0b\x32\x15.ledger_swap.UDecimal\x12\x1d\n\x15\x64\x65vice_transaction_id\x18\x07 \x01(\x0c\"\x93\x01\n\x0fNewFundResponse\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x14\n\x0c\x61\x63\x63ount_name\x18\x02 \x01(\t\x12\x13\n\x0bin_currency\x18\x03 \x01(\t\x12\x11\n\tin_amount\x18\x04 \x01(\x0c\x12\x12\n\nin_address\x18\x05 \x01(\t\x12\x1d\n\x15\x64\x65vice_transaction_id\x18\x06 \x01(\x0c\x62\x06proto3' + serialized_pb=b'\n\x18src/proto/protocol.proto\x12\x0bledger_swap\"\xe6\x02\n\x16NewTransactionResponse\x12\x15\n\rpayin_address\x18\x01 \x01(\t\x12\x16\n\x0epayin_extra_id\x18\x02 \x01(\t\x12\x18\n\x10payin_extra_data\x18\r \x01(\x0c\x12\x16\n\x0erefund_address\x18\x03 \x01(\t\x12\x17\n\x0frefund_extra_id\x18\x04 \x01(\t\x12\x16\n\x0epayout_address\x18\x05 \x01(\t\x12\x17\n\x0fpayout_extra_id\x18\x06 \x01(\t\x12\x15\n\rcurrency_from\x18\x07 \x01(\t\x12\x13\n\x0b\x63urrency_to\x18\x08 \x01(\t\x12\x1a\n\x12\x61mount_to_provider\x18\t \x01(\x0c\x12\x18\n\x10\x61mount_to_wallet\x18\n \x01(\x0c\x12\x1d\n\x15\x64\x65vice_transaction_id\x18\x0b \x01(\t\x12 \n\x18\x64\x65vice_transaction_id_ng\x18\x0c \x01(\x0c\"1\n\x08UDecimal\x12\x13\n\x0b\x63oefficient\x18\x01 \x01(\x0c\x12\x10\n\x08\x65xponent\x18\x02 \x01(\r\"\xc3\x01\n\x0fNewSellResponse\x12\x14\n\x0ctrader_email\x18\x01 \x01(\t\x12\x13\n\x0bin_currency\x18\x02 \x01(\t\x12\x11\n\tin_amount\x18\x03 \x01(\x0c\x12\x12\n\nin_address\x18\x04 \x01(\t\x12\x14\n\x0cout_currency\x18\x05 \x01(\t\x12)\n\nout_amount\x18\x06 \x01(\x0b\x32\x15.ledger_swap.UDecimal\x12\x1d\n\x15\x64\x65vice_transaction_id\x18\x07 \x01(\x0c\"\x93\x01\n\x0fNewFundResponse\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x14\n\x0c\x61\x63\x63ount_name\x18\x02 \x01(\t\x12\x13\n\x0bin_currency\x18\x03 \x01(\t\x12\x11\n\tin_amount\x18\x04 \x01(\x0c\x12\x12\n\nin_address\x18\x05 \x01(\t\x12\x1d\n\x15\x64\x65vice_transaction_id\x18\x06 \x01(\x0c\x62\x06proto3' ) @@ -48,70 +48,77 @@ is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='refund_address', full_name='ledger_swap.NewTransactionResponse.refund_address', index=2, + name='payin_extra_data', full_name='ledger_swap.NewTransactionResponse.payin_extra_data', index=2, + number=13, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='refund_address', full_name='ledger_swap.NewTransactionResponse.refund_address', index=3, number=3, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='refund_extra_id', full_name='ledger_swap.NewTransactionResponse.refund_extra_id', index=3, + name='refund_extra_id', full_name='ledger_swap.NewTransactionResponse.refund_extra_id', index=4, number=4, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='payout_address', full_name='ledger_swap.NewTransactionResponse.payout_address', index=4, + name='payout_address', full_name='ledger_swap.NewTransactionResponse.payout_address', index=5, number=5, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='payout_extra_id', full_name='ledger_swap.NewTransactionResponse.payout_extra_id', index=5, + name='payout_extra_id', full_name='ledger_swap.NewTransactionResponse.payout_extra_id', index=6, number=6, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='currency_from', full_name='ledger_swap.NewTransactionResponse.currency_from', index=6, + name='currency_from', full_name='ledger_swap.NewTransactionResponse.currency_from', index=7, number=7, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='currency_to', full_name='ledger_swap.NewTransactionResponse.currency_to', index=7, + name='currency_to', full_name='ledger_swap.NewTransactionResponse.currency_to', index=8, number=8, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='amount_to_provider', full_name='ledger_swap.NewTransactionResponse.amount_to_provider', index=8, + name='amount_to_provider', full_name='ledger_swap.NewTransactionResponse.amount_to_provider', index=9, number=9, type=12, cpp_type=9, label=1, has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='amount_to_wallet', full_name='ledger_swap.NewTransactionResponse.amount_to_wallet', index=9, + name='amount_to_wallet', full_name='ledger_swap.NewTransactionResponse.amount_to_wallet', index=10, number=10, type=12, cpp_type=9, label=1, has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='device_transaction_id', full_name='ledger_swap.NewTransactionResponse.device_transaction_id', index=10, + name='device_transaction_id', full_name='ledger_swap.NewTransactionResponse.device_transaction_id', index=11, number=11, type=9, cpp_type=9, label=1, has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( - name='device_transaction_id_ng', full_name='ledger_swap.NewTransactionResponse.device_transaction_id_ng', index=11, + name='device_transaction_id_ng', full_name='ledger_swap.NewTransactionResponse.device_transaction_id_ng', index=12, number=12, type=12, cpp_type=9, label=1, has_default_value=False, default_value=b"", message_type=None, enum_type=None, containing_type=None, @@ -130,7 +137,7 @@ oneofs=[ ], serialized_start=42, - serialized_end=374, + serialized_end=400, ) @@ -168,8 +175,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=376, - serialized_end=425, + serialized_start=402, + serialized_end=451, ) @@ -242,8 +249,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=428, - serialized_end=623, + serialized_start=454, + serialized_end=649, ) @@ -309,8 +316,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=626, - serialized_end=773, + serialized_start=652, + serialized_end=799, ) _NEWSELLRESPONSE.fields_by_name['out_amount'].message_type = _UDECIMAL diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00000.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..8d84cc70fea8013b7e8b25c0982ce142fa103d5c GIT binary patch literal 374 zcmV-+0g3*JP)K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00001.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1161a4a2bb201bc66c32ad19d6d59c9c438c2a GIT binary patch literal 421 zcmV;W0b2fvP)Tp(Jne;sUV`@Cx$m&G*uD9N2S~5IF92ym0dOZeE~_QbcnF0lLs20 z-H>jK(CuX`FE}{#^sund1RpmllE~PKUQkL}N@jMV@VKAJ;Lfh4EAQ*~3BRPi;79Cn z4j8^Dw;Ikc2ceMficsN)hln z^ZgEQKxEAlRy6U&3SXcqs-fgPYjC|&Ln;E~HO126Xli!Dva2i}v1Yu5$%1V}xK}fJGAYS8Pbz=*97VHEZ_@&R=7?PKD z08av9Bio8^R0IJATe;665ss3P?153CIS@JEia6^ZAhe@)f zvE!8PSB96g%JMIyM^qlU4j^l`VAsgoLTP6GpXzVQp3*=j>4Z^MO@B-~;a_^%yJMPw zc#FR-2i1q09zC$Vp#Q0=Z|!nV@(yTI2k6M5V)s#AJ8`<4aHo!;VS09!_IU?BRfG^i c2qAZ32P++iaH3QBH2?qr07*qoM6N<$f;WDRL;wH) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00003.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b744ccf630fdf7f07a80fab70a591ac5ba621430 GIT binary patch literal 355 zcmV-p0i6DcP)5X5D#3LgaT(qS;ATI8w6Hj12|;#?t@urV(Je6wyTkV(Zi}}Ocdwg?`5L-IVzjb0y&kUZ7R^MSfYSq2 z1dHAG0G;&EpRd_H&8w;gA-?f8_VED#0002MWj>XbxmKLyO!EK$002ovPDHLkV1jb# Bp>zNM literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00004.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..37f904f9f59ddafe25dc3235b40a6d8dd52ac19e GIT binary patch literal 301 zcmV+|0n+}7P)Wx8y7#(2~*zZ)SI+@K+lXO`KA%x6IKpUXozn?C{2C`#XG6#&s ziZNW(8^!!vLZcdL(|8VP3OclkPt!$Aq2t!w@8Ua->CPj00000NkvXXu0mjf2GxhI literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00005.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00006.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_invalid_type/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..a0aef4dec0dfc252a17bd807d57c4c6fe3c5fb07 GIT binary patch literal 367 zcmV-#0g(QQP)FKR_EmkR81A^c*O;tGrCLNUFwG*=R`Xh|jbfxn=D{Uy81^r#!;7sJlQ%fbhFv z{OMwsKORvZPW3Zr1Du7+>_jyM2K<X?HP|KLs=qP~!1To{iNp_zd7I#_3*XL6nRa zdIBqyWwO)7GG%|h2=J6At5r<>$MI>=&K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00001.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1161a4a2bb201bc66c32ad19d6d59c9c438c2a GIT binary patch literal 421 zcmV;W0b2fvP)Tp(Jne;sUV`@Cx$m&G*uD9N2S~5IF92ym0dOZeE~_QbcnF0lLs20 z-H>jK(CuX`FE}{#^sund1RpmllE~PKUQkL}N@jMV@VKAJ;Lfh4EAQ*~3BRPi;79Cn z4j8^Dw;Ikc2ceMficsN)hln z^ZgEQKxEAlRy6U&3SXcqs-fgPYjC|&Ln;E~HO126Xli!Dva2i}v1Yu5$%1V}xK}fJGAYS8Pbz=*97VHEZ_@&R=7?PKD z08av9Bio8^R0IJATe;665ss3P?153CIS@JEia6^ZAhe@)f zvE!8PSB96g%JMIyM^qlU4j^l`VAsgoLTP6GpXzVQp3*=j>4Z^MO@B-~;a_^%yJMPw zc#FR-2i1q09zC$Vp#Q0=Z|!nV@(yTI2k6M5V)s#AJ8`<4aHo!;VS09!_IU?BRfG^i c2qAZ32P++iaH3QBH2?qr07*qoM6N<$f;WDRL;wH) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00003.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b744ccf630fdf7f07a80fab70a591ac5ba621430 GIT binary patch literal 355 zcmV-p0i6DcP)5X5D#3LgaT(qS;ATI8w6Hj12|;#?t@urV(Je6wyTkV(Zi}}Ocdwg?`5L-IVzjb0y&kUZ7R^MSfYSq2 z1dHAG0G;&EpRd_H&8w;gA-?f8_VED#0002MWj>XbxmKLyO!EK$002ovPDHLkV1jb# Bp>zNM literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00004.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..37f904f9f59ddafe25dc3235b40a6d8dd52ac19e GIT binary patch literal 301 zcmV+|0n+}7P)Wx8y7#(2~*zZ)SI+@K+lXO`KA%x6IKpUXozn?C{2C`#XG6#&s ziZNW(8^!!vLZcdL(|8VP3OclkPt!$Aq2t!w@8Ua->CPj00000NkvXXu0mjf2GxhI literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00005.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00006.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_missing_extra_data/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..a0aef4dec0dfc252a17bd807d57c4c6fe3c5fb07 GIT binary patch literal 367 zcmV-#0g(QQP)FKR_EmkR81A^c*O;tGrCLNUFwG*=R`Xh|jbfxn=D{Uy81^r#!;7sJlQ%fbhFv z{OMwsKORvZPW3Zr1Du7+>_jyM2K<X?HP|KLs=qP~!1To{iNp_zd7I#_3*XL6nRa zdIBqyWwO)7GG%|h2=J6At5r<>$MI>=&K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00001.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1161a4a2bb201bc66c32ad19d6d59c9c438c2a GIT binary patch literal 421 zcmV;W0b2fvP)Tp(Jne;sUV`@Cx$m&G*uD9N2S~5IF92ym0dOZeE~_QbcnF0lLs20 z-H>jK(CuX`FE}{#^sund1RpmllE~PKUQkL}N@jMV@VKAJ;Lfh4EAQ*~3BRPi;79Cn z4j8^Dw;Ikc2ceMficsN)hln z^ZgEQKxEAlRy6U&3SXcqs-fgPYjC|&Ln;E~HO126Xli!Dva2i}v1Yu5$%1V}xK}fJGAYS8Pbz=*97VHEZ_@&R=7?PKD z08av9Bio8^R0IJATe;665ss3P?153CIS@JEia6^ZAhe@)f zvE!8PSB96g%JMIyM^qlU4j^l`VAsgoLTP6GpXzVQp3*=j>4Z^MO@B-~;a_^%yJMPw zc#FR-2i1q09zC$Vp#Q0=Z|!nV@(yTI2k6M5V)s#AJ8`<4aHo!;VS09!_IU?BRfG^i c2qAZ32P++iaH3QBH2?qr07*qoM6N<$f;WDRL;wH) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00003.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b744ccf630fdf7f07a80fab70a591ac5ba621430 GIT binary patch literal 355 zcmV-p0i6DcP)5X5D#3LgaT(qS;ATI8w6Hj12|;#?t@urV(Je6wyTkV(Zi}}Ocdwg?`5L-IVzjb0y&kUZ7R^MSfYSq2 z1dHAG0G;&EpRd_H&8w;gA-?f8_VED#0002MWj>XbxmKLyO!EK$002ovPDHLkV1jb# Bp>zNM literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00004.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..37f904f9f59ddafe25dc3235b40a6d8dd52ac19e GIT binary patch literal 301 zcmV+|0n+}7P)Wx8y7#(2~*zZ)SI+@K+lXO`KA%x6IKpUXozn?C{2C`#XG6#&s ziZNW(8^!!vLZcdL(|8VP3OclkPt!$Aq2t!w@8Ua->CPj00000NkvXXu0mjf2GxhI literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00005.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00006.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_unexpected_extra_data/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..a0aef4dec0dfc252a17bd807d57c4c6fe3c5fb07 GIT binary patch literal 367 zcmV-#0g(QQP)FKR_EmkR81A^c*O;tGrCLNUFwG*=R`Xh|jbfxn=D{Uy81^r#!;7sJlQ%fbhFv z{OMwsKORvZPW3Zr1Du7+>_jyM2K<X?HP|KLs=qP~!1To{iNp_zd7I#_3*XL6nRa zdIBqyWwO)7GG%|h2=J6At5r<>$MI>=&K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00001.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1161a4a2bb201bc66c32ad19d6d59c9c438c2a GIT binary patch literal 421 zcmV;W0b2fvP)Tp(Jne;sUV`@Cx$m&G*uD9N2S~5IF92ym0dOZeE~_QbcnF0lLs20 z-H>jK(CuX`FE}{#^sund1RpmllE~PKUQkL}N@jMV@VKAJ;Lfh4EAQ*~3BRPi;79Cn z4j8^Dw;Ikc2ceMficsN)hln z^ZgEQKxEAlRy6U&3SXcqs-fgPYjC|&Ln;E~HO126Xli!Dva2i}v1Yu5$%1V}xK}fJGAYS8Pbz=*97VHEZ_@&R=7?PKD z08av9Bio8^R0IJATe;665ss3P?153CIS@JEia6^ZAhe@)f zvE!8PSB96g%JMIyM^qlU4j^l`VAsgoLTP6GpXzVQp3*=j>4Z^MO@B-~;a_^%yJMPw zc#FR-2i1q09zC$Vp#Q0=Z|!nV@(yTI2k6M5V)s#AJ8`<4aHo!;VS09!_IU?BRfG^i c2qAZ32P++iaH3QBH2?qr07*qoM6N<$f;WDRL;wH) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00003.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b744ccf630fdf7f07a80fab70a591ac5ba621430 GIT binary patch literal 355 zcmV-p0i6DcP)5X5D#3LgaT(qS;ATI8w6Hj12|;#?t@urV(Je6wyTkV(Zi}}Ocdwg?`5L-IVzjb0y&kUZ7R^MSfYSq2 z1dHAG0G;&EpRd_H&8w;gA-?f8_VED#0002MWj>XbxmKLyO!EK$002ovPDHLkV1jb# Bp>zNM literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00004.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..37f904f9f59ddafe25dc3235b40a6d8dd52ac19e GIT binary patch literal 301 zcmV+|0n+}7P)Wx8y7#(2~*zZ)SI+@K+lXO`KA%x6IKpUXozn?C{2C`#XG6#&s ziZNW(8^!!vLZcdL(|8VP3OclkPt!$Aq2t!w@8Ua->CPj00000NkvXXu0mjf2GxhI literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00005.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00006.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_1/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..a0aef4dec0dfc252a17bd807d57c4c6fe3c5fb07 GIT binary patch literal 367 zcmV-#0g(QQP)FKR_EmkR81A^c*O;tGrCLNUFwG*=R`Xh|jbfxn=D{Uy81^r#!;7sJlQ%fbhFv z{OMwsKORvZPW3Zr1Du7+>_jyM2K<X?HP|KLs=qP~!1To{iNp_zd7I#_3*XL6nRa zdIBqyWwO)7GG%|h2=J6At5r<>$MI>=&K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00001.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1161a4a2bb201bc66c32ad19d6d59c9c438c2a GIT binary patch literal 421 zcmV;W0b2fvP)Tp(Jne;sUV`@Cx$m&G*uD9N2S~5IF92ym0dOZeE~_QbcnF0lLs20 z-H>jK(CuX`FE}{#^sund1RpmllE~PKUQkL}N@jMV@VKAJ;Lfh4EAQ*~3BRPi;79Cn z4j8^Dw;Ikc2ceMficsN)hln z^ZgEQKxEAlRy6U&3SXcqs-fgPYjC|&Ln;E~HO126Xli!Dva2i}v1Yu5$%1V}xK}fJGAYS8Pbz=*97VHEZ_@&R=7?PKD z08av9Bio8^R0IJATe;665ss3P?153CIS@JEia6^ZAhe@)f zvE!8PSB96g%JMIyM^qlU4j^l`VAsgoLTP6GpXzVQp3*=j>4Z^MO@B-~;a_^%yJMPw zc#FR-2i1q09zC$Vp#Q0=Z|!nV@(yTI2k6M5V)s#AJ8`<4aHo!;VS09!_IU?BRfG^i c2qAZ32P++iaH3QBH2?qr07*qoM6N<$f;WDRL;wH) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00003.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b744ccf630fdf7f07a80fab70a591ac5ba621430 GIT binary patch literal 355 zcmV-p0i6DcP)5X5D#3LgaT(qS;ATI8w6Hj12|;#?t@urV(Je6wyTkV(Zi}}Ocdwg?`5L-IVzjb0y&kUZ7R^MSfYSq2 z1dHAG0G;&EpRd_H&8w;gA-?f8_VED#0002MWj>XbxmKLyO!EK$002ovPDHLkV1jb# Bp>zNM literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00004.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..37f904f9f59ddafe25dc3235b40a6d8dd52ac19e GIT binary patch literal 301 zcmV+|0n+}7P)Wx8y7#(2~*zZ)SI+@K+lXO`KA%x6IKpUXozn?C{2C`#XG6#&s ziZNW(8^!!vLZcdL(|8VP3OclkPt!$Aq2t!w@8Ua->CPj00000NkvXXu0mjf2GxhI literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00005.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00006.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_valid_2/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..a0aef4dec0dfc252a17bd807d57c4c6fe3c5fb07 GIT binary patch literal 367 zcmV-#0g(QQP)FKR_EmkR81A^c*O;tGrCLNUFwG*=R`Xh|jbfxn=D{Uy81^r#!;7sJlQ%fbhFv z{OMwsKORvZPW3Zr1Du7+>_jyM2K<X?HP|KLs=qP~!1To{iNp_zd7I#_3*XL6nRa zdIBqyWwO)7GG%|h2=J6At5r<>$MI>=&K?4J2QqX3 zXn7ePqhBDwvA-|J28LIrjF%tX0z{3v6!_gF&(SYH)S*7TN;1RxW-%}TLH9_+sttDO z-T32w&rL(!1@Vr`jm5G(8dd=Ruu#)JAN?l#rFLU`oQ(r?$33AC7s0}pw!fi~(9k^# zU9aci?pXN=I7A<-f!Mw2untnw9MivqZYw}c5&)gweYhbTnv#2#t$0X2wST7_1F;LR zw?>Da2SkSfG>qWq1mej-6nW@2l+Z=0om5jdB%3o3Qx19_LNUlTqF4R_1Iaj%@^2O= z@;n%h1N>H$2;%-~Dvx1!0LtkT-;cq73rgisOElFtPbcL{d3TfNQvm<~003s>1*i4o Uje8$F8UO$Q07*qoM6N<$g5rpv%m4rY literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00001.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9c1161a4a2bb201bc66c32ad19d6d59c9c438c2a GIT binary patch literal 421 zcmV;W0b2fvP)Tp(Jne;sUV`@Cx$m&G*uD9N2S~5IF92ym0dOZeE~_QbcnF0lLs20 z-H>jK(CuX`FE}{#^sund1RpmllE~PKUQkL}N@jMV@VKAJ;Lfh4EAQ*~3BRPi;79Cn z4j8^Dw;Ikc2ceMficsN)hln z^ZgEQKxEAlRy6U&3SXcqs-fgPYjC|&Ln;E~HO126Xli!Dva2i}v1Yu5$%1V}xK}fJGAYS8Pbz=*97VHEZ_@&R=7?PKD z08av9Bio8^R0IJATe;665ss3P?153CIS@JEia6^ZAhe@)f zvE!8PSB96g%JMIyM^qlU4j^l`VAsgoLTP6GpXzVQp3*=j>4Z^MO@B-~;a_^%yJMPw zc#FR-2i1q09zC$Vp#Q0=Z|!nV@(yTI2k6M5V)s#AJ8`<4aHo!;VS09!_IU?BRfG^i c2qAZ32P++iaH3QBH2?qr07*qoM6N<$f;WDRL;wH) literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00003.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..b744ccf630fdf7f07a80fab70a591ac5ba621430 GIT binary patch literal 355 zcmV-p0i6DcP)5X5D#3LgaT(qS;ATI8w6Hj12|;#?t@urV(Je6wyTkV(Zi}}Ocdwg?`5L-IVzjb0y&kUZ7R^MSfYSq2 z1dHAG0G;&EpRd_H&8w;gA-?f8_VED#0002MWj>XbxmKLyO!EK$002ovPDHLkV1jb# Bp>zNM literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00004.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..37f904f9f59ddafe25dc3235b40a6d8dd52ac19e GIT binary patch literal 301 zcmV+|0n+}7P)Wx8y7#(2~*zZ)SI+@K+lXO`KA%x6IKpUXozn?C{2C`#XG6#&s ziZNW(8^!!vLZcdL(|8VP3OclkPt!$Aq2t!w@8Ua->CPj00000NkvXXu0mjf2GxhI literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00005.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1c9156c31edf73cb072eaebf2db3fbe1ba5c612b GIT binary patch literal 414 zcmV;P0b%}$P)j~f|{k#}B z4)Di%0(GQh%XXzDG$sKK-Q2JkKR-`QsiPFD-4d_!i{fwH;J|_aEL%ZYNu#B0FJ7G| z;=_VQWOA9;dQ4Y9)LpKCV=ri`X({49JagUwO3&5UdSK)wEJxPN%9wG}45n;lzK(aC zKtbL$y*-#9uSql`7 zENOEh^0jsFWbV&<+yj5)WEX_aERLO-`${sQhD#B5ZCio#Fr4qHlr^7X|9DL69eFa= z#kf#}$Pcl(QEE=tNl8Pt$o;~Fk*8r@j8mpwSGW8d!1&11FbzPh@^gWj=oh7f%f7G)4s^6#xJL07*qo IM6N<$g02I(Gynhq literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00006.png b/test/python/snapshots/nanos/test_bitcoin_thorswap_wrong_hash/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..a0aef4dec0dfc252a17bd807d57c4c6fe3c5fb07 GIT binary patch literal 367 zcmV-#0g(QQP)FKR_EmkR81A^c*O;tGrCLNUFwG*=R`Xh|jbfxn=D{Uy81^r#!;7sJlQ%fbhFv z{OMwsKORvZPW3Zr1Du7+>_jyM2K<X?HP|KLs=qP~!1To{iNp_zd7I#_3*XL6nRa zdIBqyWwO)7GG%|h2=J6At5r<>$MI>=&vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00002.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00003.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00004.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00005.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_invalid_type/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00000.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00002.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00003.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00004.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00005.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_missing_extra_data/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00000.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00002.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00003.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00004.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00005.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_unexpected_extra_data/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00000.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00002.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00003.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00004.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00005.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_1/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00000.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00002.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00003.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00004.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00005.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_valid_2/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00000.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00002.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00003.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00004.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00005.png b/test/python/snapshots/nanosp/test_bitcoin_thorswap_wrong_hash/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00000.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00002.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00003.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00004.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00005.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_invalid_type/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00000.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00002.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00003.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00004.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00005.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_missing_extra_data/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00000.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00002.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00003.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00004.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00005.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_unexpected_extra_data/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00000.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00002.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00003.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00004.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00005.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_1/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00000.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00002.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00003.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00004.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00005.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_valid_2/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00000.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*EaktG3V`!=%S+v91fTL z${+okK4tG0M)Z5UMpm&@RsEOf&Mf|#(&nu5T7ibEASh28YixB^cWmiqFywr6JKa*ItFyzyIbSVQOv}1eDf`@3RkZDnu&%1dr1x3(zN(&Xx_;_FXz$&G>#`H(FIJH& zOzWHTc+>3r=S5Xtg+^}An3-nyS8kH8)b~Bz*;U>GC69iq@8SBo_@2_IcmI1B80Pxy zVUB6ty)b3EmDmTz-2BM2s;~JUcSa`pYAfY0p7x7n(?yBYrw7j;6&5avxvJx?6?^{g zrnOTTr?yXG+gcnc9_~8J^t|_`qmmasl+C*vsHAs|<$>8;_HR1Yrsvn$Y*7-MoOa+w zzV%nNkoUW~5;9dPvtzbtuh#J{E!=!=?f&Ow3tyz{`7hD6`s2UD0?ktcTEmJSrz9DO g-r)v?IXW=tjeqlMRnVqP#rGg7Pgg&ebxsLQ0M63d)Bpeg literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00002.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..ec236cf1d5cde8862913e152f20232548f4059ab GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-$ba4!+nDh2#F5e*qo`#2+ zdpN(_3zdI7KB>*2vDUGB-}&{KH=LqgY{-)aYBIQcx{68G&}}E5Vocqkt<~y3BK#K| zt$ZW*(28+Yk^d11XO2&MRdi%uUb|hzRGTT2>hJO5>F=DyYc^HKs4GOD&fIZ(b#>>~ z{h#BSmTbFIFa7&T6?;nG@!EwvJN+D@vcApmdig$V;Tu&(pk3i-b}hWg7-(y{Dt7Lt zp7_^RQ|>C3e$evmZl5YU@7VEUg?4ZKW#ljKm~rMSzv0Kjr!Q|3Uox$uK6z%tmLvVA z9lt-^_Ll4Y-3zmKT{QpyJ*~I=z}6Q$cO(2y_Ak7w7HeI&s@S5GXX@>%yH6e5dc5xf zr~cX7oU0tweqGjBsP=2}L}u?0Men%^lbaWE=mQ;t3=GbQUzvQduvYK3E=btZ)z4*} HQ$iB}dzzv+ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00003.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..2d2fc70b0c073529c2b0e3e237b99783828b4e01 GIT binary patch literal 402 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{&ba4!+nDh2#piq;7Ktp2o zF3#`vLggq1t+>$%K8O?u_gcNtdCDc(IZDC+8@`YFX?vJXNl zb{>DlRptf@)nWT8zSyUZrA}DyS?`g(r+;00F^$`3 zU(K(yv)_^uGka3GHeLT=ww=$w%zJL@-LK~t?pwF7=hv56x&>w-XD&8xT&dQ#>{^ES z4rV^_5XG!1vLC*c#tKdN`+dzVx!=q6zA7!st(}=|w^X*p{9XA{hq7j$FZzpHX1$2- sv5V-8%vjp2aG5<=Fb)_v$RJ^s`i*r$?q~Kgse^<)UHx3vIVCg!08baJJOBUy literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00004.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..6a47016bdb9cca4a30c7fb066727496ef2caab0e GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|>}6ba4!+nDh3AqtGD*p4P;Y zJ)ZCCm)tq(nl91RSf~MK8M$HhvEyN zr&4)CN^eTBNHiH4AMxAty5C;&nm~w|oSXqCGXuk$lev;v?@G39v;Up#RlN0Ff;Tgm>9w%?ngZd*iu)N!ypk{{hH;e4U_ zs7AwM70cUO=C4ZsYqw>c&iPsS=JtCw$4R|?)NQuw;vW-dwZEA?D?ICsvL18>o)G@L hLH!Xc(2vNV?I)8o%f)Y+lgm{=!k(^vF6*2UngCg!k$M0C literal 0 HcmV?d00001 diff --git a/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00005.png b/test/python/snapshots/nanox/test_bitcoin_thorswap_wrong_hash/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..570ce28d53e82ac396ba25c370110058f3a638f9 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000G=VALcU%u^f&F9wV?8W~gO#c3wy7cp|)u%I- zE)Z~%>E6HYxborW7GEZYaot*b&c?U28|OUz}>J>B7D0P_oA#POai>8&i%e;&Z8>M;9a>X^5~lT7WeYZd>nPP^4|*| iFmZXc02U|=2SWD!YGeB$vn=ZnNX*mK&t;ucLK6Vgp|4c{ literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/post_sign/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/post_sign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0228e5e9effde14d5eaeca78065bc01d6616037d GIT binary patch literal 8199 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 E1Jiw82LJ#7 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/post_sign/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/post_sign/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2537ce0d8181891c4a5d48ba8f5f7f970d9b1775 GIT binary patch literal 11566 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 QK4>~aJ<~sGZaO{rHzw8$I{*Lx literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/review/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/review/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..717ac4ef6dfd7c1cd581b0850e25715e26508eb0 GIT binary patch literal 11407 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/review/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_invalid_type/review/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3589b68c2970896b58d7e25faa7c2984d24b7b50 GIT binary patch literal 14356 zcmeIZX*iVs|295Js6<7y2o*)fzV9EEWEnz4_GL&6$-a%`Q;JHBozO>?48~R?V;M^l zV<{7ZF-EpA#y-X{W4SMVkN@{Leoy`n?%((R-A`^$-i~Xo?Y+HT=j%Mr>&0zzqhm+T z9sz+s$Bb{?umXV&ya9nY-t%w(N3<*&%RnG?qVWxbJK^sZNu>IMW->Z(Rug_qLDJL2 zHSMva>tQ>NRB_2$hi^am(^$1()SEk}yYkiBb5I%-Z{M32I2|1?Uudf=kSdT`15I?Y zW0z4N(D217kVbq9#{@6O(Z|X>U{Ig<|Hy&x5Z4_RgVy1|xuWQN)(&CoDfAfXENnL| z_&Cj3(9Y{#Ol&OH>jOxyM}{Nm6Gznx(!u>EE#^=2&-p)1Mbn?(>Ye^H343bttMT~m zj#5v&SSw}G(mq|jtjo4QDl+WUyXwHBw0QiH79wn+@z_Dl z*9~}HY_wO5v&=GmJ2p1K~I^=q#!AwN5 z7PR12nLqo+9;8+`m7L!N1`$V@8%jV=jxE9u>MI>>v2_ki@&ww;&g;jI0BvMtRFAL# z`9S&l0C%a0*IP$WdIaOcys-=@sY$B}(ZDs zkLjy1lMd0#Cp!sm(?SoIOC>%LAO7G8+N*Kmph;8J_(CTyk0WWLbe*DK_;DA!%6Ki8 z6A=x;o2>`;WPgIm?0uHT({*wQFrxXdA$W2RWbP?DCkK@YtwZ@_7yCRBe{-zs^0!2W zm*~ZSS<3w(&TtD?sQr)%1e@`;*axrTb~?MA0wZ>>u}+bhQyQW=rbV1PWN{vZ1Qnb@ ziSRCmNT*4>h_F?Gq!gDfvnllYT824eea${S3u>ZleWcz|Znh0ZG&$dM zU4gio9SA7lz511(3y2rf+l{w*slJV>k=K(r^|LdDe53~kchD5>~q#;LA>7G?ctK#ub zziPpzL0K3SUL_5kELRK0A(5;@-J)FzXcY3!d#sU%CzByJr?oDe^SKsrB9h1I!N-Fg zI#ogZKgXJuesLaO_Hm2I6E?KWqeSG+^D5IQ@fSW?&33liVgO+i~*me>$`q7PKbt*FU*d)?a*K(7gPino&jHsSMdYG82qMnw)j<;=lIYrE%sltz3T< zgDTo89;qZM1{zvz^hF!0N$7s*YgEUt!)VIN$E{rw_|spi!&(+wLT`gmtV;BKzEjjPScdCqmSqk0?gDsS}qp5>Gw zO|o@bU0BGW^-A$8w;FDu%tOb|mPMa_wlh0DyD>bX>Re0M^jqcypTVr@$iMa=2`S`U zWpNT8j5qrEKTQAOE>J7OmY;8OP`-JIgn=Kf(Inj_d3a}xcvc=*ZmP?8yS%j`pXCIV z6Q_*33KjZ9YUQRglvu0Y`Uf7AtN3_kRq{J;XAfT@iP!whnwdUx_m1`lAL7!2lEb3v z3c976KKAbN)f7;0j_I6?ORn^ZNN2{F{ZmYrSMzXInQDe;6|TmN^4!sQPF-sK?=Eu{ zb%=HP%2U12lqm%%>0owz=0;C8@xKlFQk!@}`C(YD{`*K+rrff{h{PbPf} zEKq7ul9Cry6kDxW=N>4MZ(f2yh4?7(yUu6?BP5j00edCazIhoZ$`DScl5(}e^MpC$ zdL=D=ZgzQ^2aP|=d-Zv-uiJJMtt*=R2e@-#i({rz<0;ty-%-i=hx zca13dejK>>&_Rcqf_HGM?Cs#dox?%(j?ZgY#L{MdIV?(Q0u z&cY%rdaDouKm9T`%QSuov>T{%>(u`?R@j_oyHQI%(Go-tJ{3 zy>Dd=f3Llq)ah?m04KWBxia8fHN)F{9Yln7Yt*+(UI)yE6{}df;9Vne3eeW*ZWT2)8jgVb@}<%{8@wgyiX<)N=`kl zch;@AkXXRpK}9`);Dc{=9&qi6Dpqxr%P96KWT#Ui5E330|Da*Gn$*Kb)+T^d#k%BD zlj$9Nn1&gOw>LP>t9PLuiNv6KZ;rVBjx@IST6r*qKcrRY&&qOTo$9BzDMXK|Ed-c5 z|CGOJ>1qGGcL`U`(6Nw~G_ukYjCd5YHZb#6hGlmdXK`kD_3H0+gqMYaF`^av z?OD$UsYo5sSp+al?qX9KON5|>=q35>ot+A0V9`;Lp+ct{O*X@IEcP!@5wa=$- z`R&#PrGB$@X=JY%GYB>&U5NOpXC|dDXl)z$N-OBBB@^kGvvcwfD`3RRN_l!@ekmB& z{#%@$BczdQUV``WYqrayxVX6BOyEiFzg?Xl{OGRH5l!A9++EuJ{cx^Qru{99xVuI7 zULjRhR_;{0ia?sZp@;9XR8o?-A`O#ZT+vRoa60@OxvYV9A z+m)J1TuhgEQD4#5U}%|HQ32PEY%O^iJEnaQx6qkINwfdXh|IMsBS#IC{1_I)=oxbf z|F~jDA@v?CvvwdA)p%|kVB08p-@27==}^z!IZt(*UMxY#)z&8a>Or?_;oZskz3JGc zOJ4)W#BvWm`KzSeF2Mas^ebV*z$Rz*@;u`F{EPKiCs*gMbL&Ec<>rx_bYK#pXez6= zYrP>CHHpes(i_x1=)0nHn}}wOjto1RkQ5XvYkEhQ@JY7?u+O(GQ?26LDHzE?@>|sg zeGN+1So(t+x2m4G3nK%zvB0xk@i{hrQ!3_k)_0+fV5um4=?j z0+B&`glhe*gk>YxfnNxhKeLB8QC*$iCo5x1o_w@qe_^M%UiB>ul2QMD7&^4DYt9&% zvi_D32vin-ZKo1(pcZRRA&~cRJJ34=*8>l^;tsW(`EMMkCIlS@0<8Cu?{xNbJzN`x zyGcZ^eQYS{PvcnefQi|yeH!okKrBOAnKZ4w$XvTW^CDpgw7I3mSB^o|g7Hdr!-DGA@U|#9aM=>k0|E=l0$a^u zoN=FOxd>^U=VgkxqF`3#jYV}zx>A?N{LQRIpHVMKI9UJk!^M(0S5 z+b-kPonOR?p$O{v?gnrCl1$Cu<1F*H4@Kmt=PiBm@&wIV=d9e== z;B(CfHhxMZb8+|0beQMd3R~5ZkBm*2F2Q;79^C{*9mCKR%WJ?ziZ+DLn*63#H_y7~ zhRjqP`e0sT0)WoCC*pJJBcLx(X4&7Cf`*oborGGjGTYaqRz%GxK6_|_4HxOm zH9nk2dFr;A9Z~2g$*I?p9w!N46qo6B@*=M+^>Y6+n3yyYiG&~eV!{*sSeBavMZ|4u zm00+vzn?O`na$Pkx00f}!J*6D5>iUL!KmCcgf>Aj_!We%CC7P{Ff_Akg z#aJ+KshX=wA3}0=I9D#8l!Mg) zC$H1bIE7XYz)u-g<3qG^g*}+A3RGf>e~5?G(hw**?>qqCOcHwo-h|2poa9YO^07G!+7FyGVsv8K2+z@r%av<>F<(^N4 zx9aJMCQ~V^H!MF*55MYsrFNo5#+R`^0qh{C_94Ifot@DP3v3OTfvp8wn`BXpffcpn zNkn79E?E@BVo1e4&CSg{<3&~`Lun;t^L1-F0YtP^qGrR)c|Pu16Svb`2Db?z>Ci}Z zyvliBnODGsiit(sKwFux!dQ&<-@uG>@wa8)1K^ELKO+{{F3z4dHY|n;q$okdx8(7w zMMB$I$M-3G7DrVw>Zk$$Ym@^kQ{ZL$I>`ys-{lX6Du@}Ad?Z3gHPSzyVzQkohXal{ zRT5r=-5u&43&u`GV9AW?wHPuy`LS-JR+Sb`=e$VPIXkZuSb@N&O&yi~#odPF&UP*VW&_C|GYrIdw~FA07BAILp6?ktIPWaqIP?n{K|Bu#ROkEeM{B zjl~@n;*8rVlsyL{&Tq7dLO`{ON>0suuPgc%!MNb7S;Cy^rD@K-1uo@NHCU|`6YbE$ z*yd&~7yc*W#)w|;^~{o`%h<+38rKbyXB|3sr6C$zhHTbqX?i1iU|T!A8#jo;3r?EHN-@mgK& zrmV{N{mz!NzI*`mcu`RUWF?mkfi^w*jnSxgGl!fC(Xiys54+35@+sP7U}E}qX%9%sxiY;ObaZ%0om+j{x zPbOBw1r0CgW7cC_BHt%>UP>$odqqBQJ|Ht;Cc;^yla+l3ui_Bnli()Raj$O}jI%QL zATwcSBiDl5m+g=CJ<4m%gx`a>>=LVh0Xyc*t7uyM^r?DezZo+Z6TtHHB@TIg+zi$N z(pGUPv}L5{rFzo6hx%Cad%%h>u~xAiLhksw3$R@M2V=R@BP?8B^*T99CtjpKA*>r` zLbIG(9=(1Vfq7jNe^rg$)sWjWo_b~j;~F5*A6N; zO^h|DW}doj5(2-XW4D0MH|8ITUh!_3ecHHt{s=?K&gb#Z%v!N8; zkinHMIy8vWY2wB`VY_8jfXK{#N^SilQ0;vx@gm8Llqd7vq19>O`BeqD4ZyZ=u(I(hm9;2#=)9otHAllDsWY^tiRO~dv}s@ z+l>G3@Dsv&e@ujGQ#>6)?tis z$lvdqdjYyJH)celDt*ud*z!B6{7)X|iNjyJ%&PQRNY*92iFMHHa<}aQ$Vc_=wKHd; zETH#p%cN*}B>5CDt5=C`LyBB?qPtiW$rYI=^UKk9@PW*;J%t3HW7*N1eOtshKA8~0wo!iZ1*==aK!zUuPOE^5&+U;)qiD$P-W-6`J(blQU?xD&geq=>Dk4a zqRDxbLk4doy3h@PEHbK8CE@Qm_rUKAnVD2D*Eo!ZWfz}xL)?Y|fh?ui2O(jVEhtkN zm3Kv6X`OG|8epaCWlW4}@Q#QBl{)?M8A+4~lTsjJyw^S^Ga>eA=j+e<3el{x!G3Wn zKN{v>Ggy3za{?*rVCQjZM(JP~-CfXdpdv-*>`Tp})Sd*_Z_=OuVhf_rRUf_HVofom zi$U;nii|!b4^5s4ms$WduCDdb_Ic?Q`*a39Y3m3mZ~vXsxIUC9$G6g6^(MG!D4yW} zHNv<_j6%+=1-)AqM+RYXxsJPEj>#NuaXRNBnfh}TiR_VnfB8&|derlpZr27gcxNr_ z*nuy;>=wjL+jMAdsI3#hCtD3N#ctM&H-L+i#DW8|i@~N@uZmn!hlCC~w_vGvEd_J< zMU54@u#8)cqL{>~FUqIje#H&y>r**+YGIQ5^wG@{VEV_&iZAYrFvLb?gv)5PH_g-Q7--j0Oi*)hL*fsH;!`x zEQpV;a6s4$CYSrGZbgaDQgw$dPx+ZR25>so^n+A()Ys6f^-_uEhw)bi*FTJ>T6u8K zQ@z9V@|nX+*&zXS4tw`4?$mey*F6i3?jhitU+((zwpZ<~Z=qo!Wk6D5^R>bG65{QP z6nNvsKhm^tN)gpyoC-u(hZsUf;8i}8BeRR4_Vau5Iy)O_7TQ{tm|HoPSs^#y-7QOCvtVxmL?|r1I(K8Yz0zf{*sxAz3i}%r9d^ zW_>l;{t%+7@ zPKaN%CI?Q9~5~^3PwV^X1n~*-@ln(B^|dlfyn>RM9-FLhoA1fK?~yrhHVwI z!|K@y%8mMS>D8*9Zh%m1h4wfnL$b8f%KHa3UiVrDuM{fbANoDs4sCcEoAq>#>yAjL zN7~PShPozIiB63ukz=)r8qEHXq3RA%9&lO9z+1&(o_S$yA>F8qa_mMCb#=XPpc7VJ zs$`I%vwFo7{@m-(kRR~uoPOm{sTDru~T8ry()+MllvU=eKW-Y%Vz9C7}(vizvI=SO=7IytGX;Ss4r zNW@{mt<&ci{>oyx&yREd1g|(gx@lA-8o>GHS8xzNyGQovS{f{Yr{6Lc8+7_DN~~k! z03efIG$K2AD*b92)W!QV5cQJaN0S|ZaPU(HmuJK69T^Mew5lM|$4b|=UC58?KR500Aq{3-ntG?;Y zUY(Fi)Y>^uW&#XizJ6?>Fc9NPwrLC&gCV)sM{m@BbVu;1zxS&cxj%2GhSow4^Wx9u z$pyg6EW}XtvgHtyA%h?J{ESbhTz4g3stWY959Tug!0^re?#BIxq(85+NX_rf1}5)e z+KMLqZ zy5|cW8cAui(c$@F_v-+X)ql}^Q7vYx|IzCwSE-RC1{7%$B3J(8*FQcJ3s*MaT)S-Uckws8>&kNJYM5IauHq13UgL`_`>n|$~q z8J?}MI}_foQR`Kqg=9+kw)J{R@RrAD%)D$?v=AjbI#$l#fIPkG^weXA^u=v0pq|8pMv!RsE)`32MCoC4U2pUk5hF|qDRM@{n7XoY8^IbK=K zQ-}7WwD&&-$L)4~WXG4fL$HUz+&fnjpAezoA1beO2F+OpYPCSRtv-|LbbAdwjk2m? z)XQ}1r&=9FHib9H5T0J&w`#bG{s+0We`Q1qxSH6BaYF3<^Ppj(M%DChNsnbT%+&RO zo!?Z;Ne}*#ixr^qYE##zZnxA943Ejhsb=Ur#?Ml7(oN^N-;U~h5qvBI@X0XZYy?V7 zcp)Os>gww$c=xb;7Bs6K;HcbAZ-^E0wHO8*El0!fDyl?-f8#2z&Gt}UwrgDOL= z=_L1X=(P|zWN=FL_cJA4z!m%HNZ>G#F@rMvvTqIm+V32nhZDg*-Nwey^?;abM$1)P z4H(y#)VxglT1vzCoGnVtGRUKJ1dgdd@G3SoPu((&n*WZ&OMY`d}Tb2IaAwmaN4s2u(iC5$)o^*!bJ?+&t)6Lb{l4({Z()L!P z_B|-To8l~B1RGTycv0(CKfM*59vEit%-<4*Ndbv4`h1SLoxW-LX%T^dD4`{te(nqL zy7~QO^G7DQ0ha+aaJ59)a4|!r3oP4D_uPp8Dnz>860%(1^fJP!@&oefnfv(-o_H02 z(o0W`lkGn}&oO~wa;Eb>Vk8XY6ief*X6<^NY5+i%HE3^U5jGqc3u^odxO>0}34ZU) zOVBWFfgjwjdR>^2?b92kqRB>E34SqtilEn#4z3Z`vBy(y%_k(yAYeo<`yuKnfU27C z@Ds7a4U-*P9~tkHQH5fGQD@k8)sBdF9C|1D{{j7HJwn5qc}uLWd-28jM=n^r&TQx? zvB>_2M526mg0Jn{Mr!je=@tWy2FKlV&;HTbU@S^jI+C`<~Fb%3Or=dYMp zKwKPh2^(qua(O;hFTeANG;ceNf$_5F6jlAS8;$};%*<2hBaXf#6zE*kb=MaF0YLLV zZO3GjW?MA_MdXJ&JEs&$OV11LcU3z$t#uCqdoz{+)#h06+$Wo`^SGK{d;2yN=riD@ z{zW$V3UJ0j?g9=HK$fTtD@{d&0BQ#99yW~Xl zRr=Q@EIVAs58Z6km2?+NUS`R5`RDMT2v1Vy9I6Wp)g`gYfs0IwQe(O@aL~x#yH`Ct zHoT06i+dm@&b1g$V0*AuPTFl&1FVs49)(4=NZ9)zHIQo*^bq#M+3eCaf9fJ=Ce?ApqiU`+9!MG*|&01v5~U%YLqjYHDO(B8{SRJ z(1nxT+m9+xG!+N{cVsDM$2m7r(0-p_4YX~)puDfaTUx5%AUEirvwcGS++t#4jx_^v z7@*1u)Cep06Cv;jdd=G1^hW0EgZiE4xJb~eA2k1J*6eebxU@Ljrc|PoSnM+$2~<5L z_);XYzP3kJcJl3A$Q zqZqC8?ye-dwnt?>SRf%Si!(^7EczYrw$b%vs4 zcKYX^h-dN`#N=3$nO8QT23_Y+yAapk+-#`%)b^c64Lnc4O!|0xyh|K0SzEhPSX2=|&AIK+y;I5aF@ zPRQ`>GF$#*zdj&1>-6jPH#o{IqmH6)xWY=W8wO&g?$Z^g9Y)gWlsqM5BC*?ofh{w6DzA(EsgZbip!mUoHX#=Rn)V z3O(Mq&qd}9fU5$7((O;0+JvaGjJBHdCAu1X;}%cY>0kSomys}v9&C56sZy`qa>d_G z>lj7bn8==kraXpYSnIZh>Q@3j16IfLI!XfCP$8wd;av>A@+dB*^DO634#4yRI^3Pg zR1?J4?GFLjmm${FO;7vFSDx`aneef`#)4ozPOT2RRKtjXMoD*(K4th8dU@k6Ge-aQ zRNuUs!`oa&j7#W{qXzGFl5Os|w9|9Z;5u;VLnm1X9u1SvFulS(b6q72fO-7qWVSD4 z4y~Bmr+2MXSzQI(i9FHd3;{2{h%{y#+URRXX|PnQ44kAf zqR;Sp*N4_EM}T*0xs``iEJ=`O+CJS?9YhS90ReN<^NjlH+wKdc2N-au(}$aWo4qJio0xK z<_Jy^F6sA-U{ZT((j2z33i}2W#iDT?xvbwj1g1NvB0n!^>w5Uk*utNitI)KxEw}nx-m`NU{qz@a zM|XoS#Ju%iRWUTiv`W40g=FYd1N2e}zN-h{;SeFITRillWLFaVB6pzI+b^jl@*GJ` z(WM;u;9`~5ayKuye@R`-116G1lM)c`CCJ9|l*(I&+7fEJX0~1G)9ST9BLrpWxaqXk zuAZh&Jz_3hRhHA-x32(>6XWsML3T{5q@a4>0hyS)0Jn+Td%h<)9#;D0Qaqx0KKcpK?#de(4hho=Ot#%`pvzrk=a`C7)x4l8Uk zN9_b`!@+SS{TMEBG0K1=!x8c!Db z50{ev|5lIHd`bk=zPaHnXk{!mk78)KzVrap5)^#+!2gYp5&o+WzMOe~Ux)}JaMXT= z;kcPM_j82)T_PH4zu^LeMIMf#Uy}&Bj()EB{+r(s>{z=x`5B4S65-n~Hlynu$DMLx zPsFJrea^l}GcY(VXjlyfc0VF^VaJKIU-jluq>BLK`@`S;YN1l=!kN3As}BI)*yHQ+?v_KVQhpm0J@E&xD48OiF2tt9$7eUV?Gc z=Kx#Z_%gHp5SKxft88PgRU-dV6AxI%iy+VQM1gm2dkgSU0|*k&8_Jtg>_ZH-XLiG# zsCW3}M$oW5tj8g9`LV4^KNX%Q@C&tCX*D^`%NERXS-=<0=;(y86wC#+zds_Z?ERD! z`OxsUN$G9_OTIh^B$jL>XgGT!{ij^e8C~adhCjzbI@9l%WbLF@U-;cQ^-~@e>9*sK zkRZ@(@)L7UYHgk3Y-L2AA2UHnFxgGkdwp%!!g@aeKFJ2xS_b4b@hi9Rv)?zWlafJN zJmr@7xT5~!bddSFaL>;-t=K4B2=>*5Dm|wO(KsMOjXeBO))}Z{OK%0wb-tP7S?MPV_oiqt;FX@0mOallwSnr4 zDxgZ@6Q);G?>>>c!tMU@=G9rxX*8_=A-p;rixhs%y6Ahp`k$KP~)F)Cr$3gf0BX) zK4|7-p1y-{IrJ+;He-Is;`ys74V==xuC@h`(pDxlr9ntyKupP$nx&thVWhB7Mlv4< zE^!z5LcnBqxA2P6mz8WhgNk8Q?ok|h^hJ~7v2ORSKSRCl{IF1ICMJzjg5aeR$5iXSGr!Vx zl+64fb!3;tV%;0*Lr_15INh}YY)R&lK4x8pHtdS!;4#0%9ZeTmvBxdhMwqK>>VT51 z>3B6Bl1DM#gW6Va(B_p3QM5h;@Ck%T-ze*>meFO@Ql;B#E5JwOwAcy;U|G)3K@)>HH<)9tz8C znqAyEwF3cwku7y9W4iLBkOrQtRYYdNiiws%=jv?@#BC~Ic!DMLn!XI%#z^x(_x zjfJ}Au0SGS1nE7|BF^Fa>xOF<{Zy~D`y>~?!ST7R5f6c4*w79-r&_k>Fv|U5F?+oY zAE&CJ>ga!FNK>!YoB(X2pDAbG5mlS^*SM`R>2P_++(|h%zVb}v`=0N<#4-RgGT=VY z#dpF<;yl2nnh2QGsynzIgT+r~esNdzb%Xdr36^_nf@80g5c|^opD=f2yrIGWG4CnvuuS5L3f{ zqr+Vhb#e(h*%J|oHDL#huRWSBr+bfdp~)ggb3Rm0)RgzS2l01UWZqvJnLF8>t@-mU z&8P*;IaHQ~4|3LYJF*D^{+BNDypf)>$PuLYjPYPvuU-xxg$<~&} zM|i|}*x1;PnB2I2la1}bGd4E%Vs3Wej*eA3l8sHJ%H;Z$TQRRzNu=fyb4-%wgmfXB z;$t;Vz5~~~1=TtEu3Q@i7VZPr?hDFsGTy~uI|KHvU-wypNo_dPaC5!)zHQTu{}q!~ z@{!~ICuUc)C>z_(>3X)xD;@`|A9b@AAAG>|*AaH!`{JA;Y#Q7kwg5o~wl63DuRoA( ze`o@a$EW6VfAelvua~R&2x9ALSFZnfo=qUu#-r6gvct{2(V9(W{`dn!rvqZWV;reX z?5cUxgChQ19@nk-K%+d}Er{a|Z;sy|(LYmvLy-;t({JNa{5>asNz)0|@p>cMpPo-X z*`~Yn?0jot{~6^yQLk_rOxc?_n!sj+^z^Sz;TZO55}(+NW&Ix9X?Kzi*^cbVPdp^5&GETAXHp!%t1P1!dVrxYfUTG6>iaDt+6l;l+?IeS6xX zQqF|tT6^K_01BbhkG}dHY2EXX!DJF0hCb1!?Mj!9%V)_YcSJxs-0a&{VPy9jyWC7M z@As-r;RcfYFsC@J<-p%O5p4;r=mHx-&ZvTnoCt7c%)V*f8WVyb3T##1@p0T5wRp7n z+T{1@R8n%=CM{!@-^Y;_rMs=m*Mk@V0vFcWw7&|;Nm939nkNYudBCvftdc8&A7%Ut zq8O>zEJDK5N7!k^1C6RHH8H&G%S8S7QyFksE2$iftiYt7Mw}uAlVWWUU2A7iI>O~} z>;Oqt^*rYUCNNbDqeC&eS-85YkW!*+8%MUveiK^k-{&myfQy}X$g(1bg{ADk#{+zj z9$LD+3?@u0>55trxh`%YLcCCaDFH? zveu=TPU5Z(Aslr;P)~TT>vdhqL6nYnd>&j1_doSubMCHCiJ6UXS63H_x(7sVAAA0} zPpboHi9?vyCMfQn+Wr2Bk7GYa%hGvStBKZ0p=x}6w&R=Qu_eF`x4|DD4HT| zH0nradWwbRoY?47$_{;k0`-Z5l{Z1H#C7?LAGC^1o<^UpxhMKh%cK2Vp<1w!xIr7I zG1FKVWs__@Y3I(hLstYj4;+4q6?AABV!)t|VPZ*-E)Iw_lE8I@<+-p=DA0h~_9Ob2 zg=FBRz)s00xewl%h{6uh+v71lt=0|9cTex1tRF5z*nOWFoLXa$tU@$#F3R}`jC3#I zbp7yKrJC#egDI4+uqexda^NJkx&XP`GyBbraZR6B>*tqODukngCfU=wG0`2LkotE! zXI#%*n_1-~WzL*PV7=zi08QHoCqnCx+i~E1TIY!>DulQ?vDe{NM`E(`K!iG^{v!Wc zkWz35-oi9Y&SI?p8e(o_Ykgvfss0sLJZ**y75@Zcx?75u93cqBV>6K3KTtoQkui%fJl|ED+-kXN7dyjDX3nJL4SSH9@gP>G*}eMx-vu-eKN@>rl#n8P?U z{Aa~83C-zO&Sm1aw{Ib+VB#=?rJX^_#IWLwY}EG(u1NrAzkMb;YOT}3_{(x&I-bXD z>=sy!(%C{>okHN8AP(xC$6&xS3D{>kU(YQx>F36GxDlN5NBfa_issVhYn@@*l2fA! zDW^wy5XL!z3Hr?UqGSeeP>7?tLXCd5!sPpBPwkD3NJ?bEa2;v&Dk4j+&T}cg*2_a`p~!=ueO=eHq9ud!^`QxC6x$VnY9)+ z?ArjE8RO4ibmL@u^|RrJB=4R0j6QE+!!>0bX;hsQq)DZ>?&V$Z?IJ(%bbxe#2FPT0 zCV61)J997G?6Ce<{ae53G8^GmE1Uat= z%9*U^y=UAZjEK=`sJINc^X*>RuQ_HCO5Dyy7!CGGGs*rSMzOqSP?SGVwsEJ1unbhr zqJCArMiA8J!E0`8-^Tgnh|7}vTWhgS5QONTO5C)c+kf#szPK*wOakW>Yb!-2P?^(N zzx)gOCDSf!xMG-H~vm}KEj4To9?^`;0{u3ZX2})8Lm^fVwD(Yt7Wyaq4F9C zh`Pm?dhUMz!=+w{_S+KqG1`*-sORT>6mRdGR#2Slh$4%*I7vlpdQP(99XMv<^-@Z9 zu#R~e@yn>>6=$GGv7VC}=QeRt9igF-z|W?@!>~VAZkEXR)2B&XiUUBk41V$y zwj>V}Qm=-)lDK9UWvFssgM+#yM5i!sV6N0KsKG^90-1xL0vo*gf-N+FSE}(&&MSDBfjMVPSa{Cz(MVh_h1y(B3sTRyWh&Cs7PbG zxJLJ5GFND;%Mx$y&F#(*eBRVW7qB~G(0Klt&r4@nQBpz^dBOlLim(xcy`#AV>@UJXkGG!vl$f7 zz?8vPwDHuGEv!z6W)*Ghp^;Rs|8vUME!y5Aa@W#LIiK?DtM&s@jbf@;yAG+(4G3qr zg!Owkajf=g8E?=%50Xm>{Al{|Szu!ynIRvd3_uM|HS2nH_RV*mPsAA%;i)XF>St|3RVyCeG zDNWibjt$2WW~?`UYG5nf##Glwfn$J4l)Bg9mLmuBB!jr71WXCGuBmX47JjzH`-NeV z7hgExxEz&!$zrT$w%)BS#ElGHTl(7bEzV$nZ%;XY;J~AA;Jjh|j^QmIAc}i!7`9B1 z%^tXYvgco4(U0>SPxKT^nvKFL4Xj7#tVZcd{FT~Uf!5?B%5AkT9t+&!eCtMjo+ zG4gW>vT5cVS6;JI%}OSu$j$`6)X-KJ)!^{;;KQb3pK9D@EP!FG>ZaL3B>_aOhsOX= zJKWT$P2b_YjS~d#5iM~1GPKQfdGw21#G%wEnGo9VQFvoySEIUxg!7)E%>oYyYV-6D z7>RmLqwf8PsM&QDPL!Hb@H6~T<9Q~c3)C7H@S}v#a=ats%#{9WN7h?p6UW`Rp1D4) zdr0gxR_$7kMI~DNWm{?`sld!zq#cxye!($svbcdu!tT9+yIny!F!*4I>FYI{jwMhq ztwYJtwM^uI2k__b~qH46up^PrApflsxle^idxWw_PhJ; z>u8}icRTOOPbY9gz85FP&(VY=&fT-R+sWGNXfuVXSUi{mK>Y9vJasd0LBYOgGw5y$ zYa_Mys-;H11`SK99i^|cXS%B`etzAVtD{VoFt(Yjv)9aj!1M(eh;4kIsaOw-%P10waLGy5n}*k(fWWVErPl$O-P zlh33h7GtCBfBX`13uO2^)Yt(5Xm)CqsUk1V&fBei)n8(?=Eh_C&s64Gb@==#(Z@Hq zCg#Ex$A*y=nCF3emS&_9^bM+s;~ zQEd9!-c#I&tLU)ON;LFiQ!Et-xt z8_vo)-v&1gw_JxHsd3T-Kc#ZpsZf8|VE&xj;RWU%{d4SB;-!w5=iL;);sMn2njg$~ z;+!}o3|po{I})gW^D3i}rP2qvgXDMqesRMwb@6$W@Dj(ePkem*4*|5;PvxD0$9QYu z-q?;k7AsgnX%?}4Q!9e&w-{$06*2>y#Vh&%7!8YdJy8?zq_&B)D$~t7EVpYlmq$z& zW!yR#%n@@Tz+t~?`e^&_fzHzvO*a(3rB`~gt~n*rI$ow-Q2X$pR`J{FA5Lvpj`M#_ zv|StX?zBFqg$RKXVDb=Byy`t z$^p?894*l5L75S<%xH6#>zOk!C{3S!*t|FCiNCq})pIEmhJLSVp8eycvzIzdv&tuA zXZJTQA|KlLjHYx=Q47)ORtI!oCHRt-?L^|)S*mWKB`_PqTE-SqN`N^TK2%ra%_mnOb0U&|a-~?H*)`Bv3 zu?R)_Q*41Ri8l43RQ)iCuq=>)B7YgsoL{&r6yE|sD%sf?NnD9@+9wJUGHukb%Cj(0}Vw}S*IxL6b` zhQi7s<#?f<%BP4c?r&*2hkYNUxBtPUkJ{zWg(5=t=YYXQH#4O~>=({0jH$YfU6*^u z<2@MP1r*aQTP?VpnxB>@wu@WW4?3^T{ZOSn>*b15df;lO_P1B_atpyiXc7*&*KJ8W zW|JUZ&#a|FHXHq=ns@peXI;{HQCxX#v6M!jx3#$_v$U?_qpt7QF>CG8m=ZHoxnd$^ zOn+`J%zwsRA0K#Wd>nmQ9eq=`5-emuvCS!IHqkD^lcas}Up0gUwny26cb`HH$_yT` z66^S0X4%>YZ!Y!BsutmO`@1HC#GQ@8j6$Z}FGq9r)qq=$JTvf)%kIL#>b)KF8YioR z6K;$}Xu_KdHJA!C<%$hQ1qF^k3~^F2t53shrww0_Kk=l#FB>{xbZcupRy30|LXx=$ z>Ce~=1`zM{w}!OvG(0t&cq&4t@D3rFqK&8P;Ys}kdg0Z5z6)g_Gu@LXQ%XXkZLzJf z88@03@XkveYfPbF^qf4=@s@%uz;%sg0%tVO2Mkgc;jKw8&I;0$z+UW{^PHy)f0b)8 zb`>_v#jMDFhLNKcJJ7aOqXm@-;khR?!SZm^D}oWib?e|cRV3jP>2NH6V+8T2W8Pdw z|4|9fD@8cpeY-Sb0CeWw2e{v1lCM8&7eIAeq@9`3kEAz{3V5UVwA_kY?e6={qHrI{ zsu|nIgyq{l9+4}>gyrT?Kh)(fxiiNk^tU7;wVq;oZu`cxx&SkYH|N)Dl_rox3HeJ#gC|rV_&Imrv`M?|!a*5=-rbu$Bb%8^|4YouX z*TCb&8=%)zh-2RP+L4pTQ|7`h72%h$z8(B$+$*H&Ji@P^t+V^J5!+by?RVgE6_ZH}q|n zeO3ecrKBsG-N(I7&Z+Mbv)9X$oEvyDqpy@tXNbP*d%TA`~Hz-w-2_E-mtpYRrcR?lvS&r zH)cB;+O)91r7n7>Dy*q=NS`KT7(g5F8@1n?v{D*Xl=ICPrd3#@8*R?mhEx8>8c_#& zeH$Az>ImfhwN-%c_G+N=&7ZF=}qf{+}VhY;o8l9V&9npFcE70RI=*G%U$-XiGa5XzrRj!TYVFk83-HWgJ8s zQ}0@oL{FF~mMSA+GlIIv0OpBl%}(20h?S&edT-E`8gA@Wx8^=fJ5bLs(=6|G zWm!$Vd34O4BB&8*ju8p^ero=Dg%1luEe&g3_99BScv`i)&Ef%vnDUr zK9y22ty5Lyd$6hFO}ZrT+e!WKf&Xgd@;^^t{TIrs|8Kt}C6fxN7+WOuvfU@{#UMlt zN3f{}*f1miJJkFi+u%P!92Ln>s z+yfo!j}5s{>3P6bE2|PU<1k*5#AQD9Wwbxm>>W4AqwOr*?)zr1Z2kS@f*7Y{QPJ#f z_VOEsPRaHnx!vq%jcuHg^N+s(?iso|B@=|8gY#HFR&m@NfChiQHT?g&Y!pDcC7-Ji{?}ziX0=TZpkC|&;I_< zO{IQ7$XF+pu}Q1#U6UVG&%OL!RWka!K}yN9o>2zOd$2?1auI(0$sc*oCPkeKKIDrb z0z72juP7`mI`kXFeOOu;kbk@lYQM+mx%D-Y*H&MJSiX`=E(9>04UeE<)}U%i$pIP6 zsb&(`_&i?NMOl;~(dDANrhK%Pa9Hp8hL6$oUA_5b8~*}?xFy@P-@1Mr}6(T=LFV|5Iho*f=fF<-|mK&Kp)s{wS) z=eh(S3?Zt`*7ug}N(qfdE{9&|8SYj7hP)XIAWs! z6iEcH+21?Wpip6UP!S9-&eck8m5!=+8T z2J)JWdp_52%o z*PPR}7z5PVC!w1W21TN&iC;t&G~q)X;maW#kuUMo;BdthFHN{ct#@fgFbZHm^8)@m z1L}j%{u?_M}h&D85jBIXs z*HPQ<{7n*;DWzOZItno1SSQaA_rNq{17h=l|6CP62pU9=Y>zzm9t#fD@^JmG-RYtX zL4;t4z)UUBKl~ORzA(u@hfWZW#2m>j&(#|04r3bV1n_Lt7{CT;dZhW+%O@B=;&5#( zX%|8zWipKqt6++pXgyKE{_F#$Sw5pXqD=gqO`7FnW+dT z6qW}gV4sIc%O`+b5X(uoYR?eyaZzxB(RY0G`#qyV zz~EeA+o7-mKh8X@tu|r9QysT}fi?6YcIhs7aw)f(z8%+Ckdz#L%oOSb$vFbjz4cZ; zB{q5xfQ4PV!H?c9ZSv{@4vo!ak7=YI&5NT%J_VOFPFcQrs)AcW0=BjCnxN80deE8L z>xChjNLc&MRLJs;G3W#=uUgWlnVQ#XX%|yUR-+{P8k`?3be_I$N!N0F?L|G&*Ra|U z74l>>;SJPhBZ=<_?jx)q~mO29g&;WEFduq|{Rs)EA2h&LE$#gvuk zk*Fix`O9BdWPAtHH7C2rR&eH*rR+c<*TI0*3Occv|+gTI|V`(->^* zUzZrn4(Onk=8ZMie10{4BtmWdWSSm+ZRu0CvjJeh7!Np}1W?*)IesokPQCBc7`-h? zF_saa$tQ+{9XG?5+LQzIm7575Q#r_<1F)YMT3O1hX;wa35_SiizCvn#b3%7#w`=mr zhGL{R=5!UHlNxOmd)Y&h@Sm$k;2k+&q3@F^C4fx@FaZFSCzPFWT~72OWtF?SE()Lu zZcWYJtDKf^1r2P*2KPN}*0~Y`N_yx%YvGe}EQ}o;s zkGweg5A-m9-?wo`KN2v{cqka0Y(#YM{DV+EuHLdoxmm}s^S%%%d%0QQbD(G-O zR?|h=s@8x0xuM5_qEaC(*m~gi!?yunpNyHk*ycO!f18)@Z?Ku5hX?4wHRXeB(_4M? zcKMVUS3b6u^s}e_oi4)v1DLz4pHc!aU2Do*G`qYr?$Z)1Nc4enK(`!Qyp=#=uugKP zU3f%|)0UiAZl*$Pgrze3W(_|Cmif0ifb{UrHFiwa9;tWRh|>;PA}?nr&UNLUp7fJm zKzCU0YfL}_dUVQrx}JC18dKJCcXCQIk#(Sve9~201Zw~mSMTmkGrT!2OfL6CKO02fIdPl#XI zY${ZR9Vv=g{2Qn=PX0|Yrj*4zF2u3y$YktIXbzIBpbF}j8z}(FuXU2yul6FRpT*DJDAO753o`)w*vTnk43OF-{<+#*q5+VO2GNu9>fzYL9R z>t0&nD>~``7_yEZV*UbVQM+{&VJ-}i)c2B% zZJx`S5JO^so$=NN@*yKQsjcEHV8Q^rJM`(Kr)$ip^SRqMU_<&5q#93SsF?R1UTm(c zuFrm1CW<89rLF5+HR0npU+Yg1xLu@l|4%lcyZcdtNvTXbXXv}n=eQrD&mW3I-&A0> zF_8xSj_=XaO=r?54*WrkNN3T;2ei)sn#FAscmdClVqzNQE3JtmZ|`H&^6&2ojm>`k z)46Sdyv0WgX&7KMrqjoM=P{23_szGc#QuS&f}DVJ!TSpk=c(6!<@zQ%*R(WW<@hw2 zw3E6y!vF(27+eYL--Q`K!EPDT0v8$Z!bYP4;lW}_II&BIpOyRjU`fqf-%i&bRKo>f zoH67tG%P@ysx_p;(Y7h9%Zh#X2@%<~rCNT%QiY~rx4XCF@@ykB1)jRr*kMVZ|FGJ= zjV~`4p{l|v8SXndXy?A5Qh5|oHD<5!WPNM{GoqjzwQpkfCiJ^8KLK9U4Bd~ge5{f` zfD3#feah7y$e#)Oq|8^A6+^zq3`gR-Fvm*}W(lKF%NL#51Fv&V1c#+K?VIM z@#1of9=cftEUlz7!>e+aMPPF zvvc0E^7r1XPWYk6w*9x+I459ls!lT(d>cctW@U|^=z9KL(;CFRqGscd+i|t#5N*kz zQ)^B;vOyUUuSf}xiDr>Hg>OCu^*L|->jwr;a#tS>g}%g2#*+ar*2LB-O<7;Gb~_G$ zJz8)Jq8>A00)0)<)^r>{q3wpt;Efg-=v#Y-nhXN$1woqOeTCTIdytO((V`~Oly4xG zUk{Hgs_MSS7kGE<0{_5X-qgs!_u$*Qc?u>%(f4!BC$yiwrux;faK~7=J5UKm99( zc4{Q_(UX(hE5BFJ2gYCq&{Zuj=N1kZL&^;XEg8#!487YjtyYbK(R5r?^39CR-i8L* zGyWV~@AQas^#@B$v>y{2zGoC?#ed(K?9t9>1T9N1j_o&I5xnC#5o6&p7j?gL%|1X< z%CDMM@HN|cay*sc(U&e<-l_4ob3=!tV-S7*->^1g!ygCz?mmy1?XDKjc==xU1 zGm*P|x?d4mxDxz?*gYpS{tg42a-L6pJ4pSo`;gSa$8Fhf%A6C()}C;;OCCJGf%qd& zc)u~ugRinPN(7e2Kc4qc4fwZs+5e|q=+}NDyO)aCE7l#ryU%7~XnDQ%s>j3s1_+3f A{Qv*} literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/post_sign/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/post_sign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0228e5e9effde14d5eaeca78065bc01d6616037d GIT binary patch literal 8199 zcmeHMXH=8vmsey!lww6e1xNq%HiPu4A|hR>Ayf+pp-CqJf{Y3dC@2sjeWWDP5eSh` zf|Id8C__T1k_h|qZ9J0N3#VxUfHN%Eh^wY!xxITEX zFUKa1IY^*Hv7)Y5UG_e|s9mxDNhw$Ye6{RU%(LQ z`)V-g;=@SxZiMgthmE4LN78#mem?@bd|Kr2L92lMw-0KbmrVQN@sG_9fBNU2|2W~F zO!!~J;o}~pc8(<^BxsexQ&M~zl(#>K$_gIA{U$a(90^YRYzDV*rLvD}QBJYJjv@uA^XoYFohbXOI$x6YTkfNZtganmVqkgp? zZS<@M#>YK#o`$H=*IrbL%7%kUOC^*2np;OfdbQ7U;8Jxf+?QT$M?fV3--!;5-ciTW zth)&XLr;FEKWLZt(mM(oeFp~X5Bdb%vJV*X&jG!>R$>)!i}DtVP&QS22+j(fde$3&SpazVQ{CcpQqC9Z0CR?o(MU6m9i4?mG+T|DJ6Tq8u|uxP!OV3p>@%A_D; z!QIOuS!K9;1#NdgB3Y@Wu)#Oxtzxzs$hV&*H04XT7GIHOW_;Ogq@4=j7ktiLynZao zBJIPz?DUsycaDf;-EO;<+jd9w??UwRGgs5>t1=>4``1nv9WXzrIYhbp{nFaS=HSt! zWRCH0C^8f{<96tah()@C81&O)(`WOdvgUD2;!3xXByh4%h0f1jdhI=M>GScsL&>sI z`J%GBBaz9`Ij@byu96?^osm_e@Tk00g_P4QsB88?>rWdBTu7OfI|<8&j`RYNbM2o`wL}{$H!NNa7_mK+zp=mi?5 z@&B)7yJCvX69{+4Fz;%2XXd?u@9~}CnQ5Ni@O)c+rSMj#aPu$g)~a1 zrek&^<-?uT?QJvp=kQSzykmg*-&UQ9@98N>!}w@Nx+osJZ&KPgzU)2zb?S?f=9mixuQQH)oCp~4q+LVweiaEx;lXOl4soD zVpKiH4s$<0KhEw#P^%Xadsg9OU#!VYn1N$;QT!K_OW=o~*2$pOKHjqym@mp0%$f{q zpJomDQ)ePPO}#i98)KZ4GsJlRc`O!-vbtkYj;;R=H@!~Y(8{a`X)?m3SHH*J@ZzI> z_}0zau;_0*?-zjadDY}w+&R-Iy#G3$Z3c$u$!j5rC>Y?Hel{pPK;JP>{ZH!gaNWYu zpfOuwlCT%zHIK3~@t@zH@T~HjP@0#ipx^aHHbkQS5|65&!G-+tgU6I4v!^e*!$%v5 zD1S*P)%0H{Gh^R^!VHS((S__}>sxL4MT0>^dUWe#{rED+?~2Q>&sy9}Oi$;0YMuPX z+Ovi)mN*CQI*kxwQQkDZJQIPP4C6q?6%^3gk>KZawDm2`-4W{3Wxsaf1s&O}E*Smn z*m7Ktx_W0Q``ks^vP)-E{dMRYPmf5vykA6Co9I|!Qe;l$x4&O+UMuEC!=y`3p1VbD za#2%8fgDin>DVB3ft}wlO7nTa$n*ZV znFun3iR~JXC3&LD&Q7y7fGV;0nVc8@Y$RB(eAv}+b$EE#9}jm#lPAOCmwub7)bHAn zmAl6_j|=p3ZSFM*Aure@@qRgH@2H%o7Z{EzIS%4Wvf1pMA@mo7|9toR(+ zvCZeIxCeF4^z`(ga<(Ynx4h>UlGxQhblNB8ZU;x=K<~f}BcAC0c`v~4jnjCg%*rlsj5u3 zc;|RPr+7d+wXjy>G#j+F3p|+&gbUnzA}NI`nt#9CDsV5IOs0)5pGh91bV9M|(G^`UYMe z?i-fX_DrekPwI4ZzV9GS5oCjJ3@N!HctV+SIUweN#Kam6JeZ(|r-H3`ExxiHba?Qs z6Z}`5U8BaP*9G)qLf48XVg8tRm2g!TIgy073J}uKk8NS|!v12<{yxOu+IinqU0%n9Dbh*yiU!4w z^vW1WVxCs?bT{v61h=Tk+m^6Ksx&PYbC7a}Tn^c`!EHym{IEsYE=i&?Xgb5o$)(8L zd1N)|xXm=$5}iIyyI@F5%2;m&$QjF~;)Q+EwJtHhn2J0*kVQohU|?X&zN0!#EWp054_Rc z)fHQ~!(wUu30vNo2py_=5_jd_n?H?OjK7nB0auS#SJ~{Nwd=kG#nCc)arGbW+$uXp zZC3`kK=&JMbBdrH@#}|LfraQ;AW%$}&0d{_izG;-{nXZc9au8+LOt^WCY^K!0kD=Z z1JmTnFL1oGj<{3gg+d2qpy4o&QDz5ZO7#eK?n#%||{}_rGIN z>J-X`tT(#UI)mr??&+2fXW$Zn(*rz!?BbxD*LTmQ(}HLn>NU&n%%7&6p14a;Q5&N1q=y;)Ld(xvY_( zt^x5!Of}g7vEJC{g#BT-%l_3aRsJr7EYbv#ABrwEz<<9t8RyX&OfC<8(v* zQ~#xXB=~AjCReBy?7lfG(Os7>z8GfUt&Ln> zhjsX%Dh+qrYyzrT(MHo8vfbpygKxRP=tf+0R+W+#jnU9boo#Y|fmTk58Bwgp1@55WQA4s=Itt35ZLY5) z5_H}Sva+jL+87jG2IB^fMD3plZo--Cua;m)v_#*8yj06nvXvaxD_jLPo zxWIaqdTHRW!Az_3TpGA1WkQ{v8iq?uURb1~lm_p6Llr)f$z-6}2J3BYZhjsH5vh`= zmIjkZpBe9Yb>)`>gmp}#;RF;=*(s2l2HpyaiU6zub2br!d8$c~!<$HjX%x5ewcp+XoTktLQXD`>tOJ6fMVeLx)yMV1 z*Do$+Q0V-2sB;COk29o;a4rs_CZ!`H$cPfM zvlEpK_V+RzA&tx$u@E)F#>&o{;g1jPHNfC*J209Vu|2$;9jNcsz=iHQx55B}Vn7ZdoNf9PVKI;Z#Ndmy93&D+U_%O> z1HZzBA95OT)U@@uk0!f?qGJ+~M~tSRjPDF=%7S^&M0Ei9O(~)CZU(^>=2^p3@Bmue zoDxiQ4Cqu#C!_QpswdE3IiExQ;~1i2<8sT};>SSfZqB_9pD~3(KpxS!%}%Aa{l0%6 zbAdTswyyz{$VU2vu{$6YYyV}>H$umV?8OH=?G8T6OgZ8kL%?zO#s1zA z-2pIQ8bkNq31$P-*Uy^w{rd}T_;65bauds(K=_4zNxk!wrT~O>pmo~O?YD{=pYRG~ zNol;C z=Ew8@&H%ais&V%(wHA_})n-4~)@jtmt^yDuEj7*Ne|IS>D$Zs}-z@OA0@<hITE%(hU5JkJm_~>Bv)Lvg%Si$LwgRR zO@QXgjGbC*ESjoC;nB6IuXI49$Jf~A>D6&8!iv0EC))^1;n-;aa%-P}m7IzCn0{Te z1PL9LNOO$CSesTq(T_g8qRyLBhtQ5qt>q5wt7KBR0M;W`QrF{d zPG+wUt5}w}1fV5_(tR>6zx!%bZ;RxR+U#@sFqgH{*sZ-G*kixMjqzEYg_+se_~Z7~ zoHHT_7kuh&quHZ(m7M4IPx7C1X_HtZDCr15tpKm4^?|5;H-qvHkB?*vU`}4?ub;#j z+jxTjku6z6NWUK58n`Eoi7hjLB;hC`6!~4omr9*ZWdZ8GkBIt;&>6G`+)0n_m<-z^ z0fD#pjg?yUqv!2-damIb&)*d+_-W%4UKW^B?sfYyqG+QYTGN3*Y5?81b<#~fRLlFd zjhC28v$m>C{W`3>&+S5hZsFN7SH0?9&-gphuZ(Qr0g62&^IbjKevXqwMm0z95TSlf zsvf9nrA```!gg`sKy^Td5uAyeZ<1kpXSosuMEcD@xsqPoZ$M(I2M#GIUbRe$52cs%D-L zSMj|YfvYhrbQm)GY-wrfO3MP^R4F&b*eszsG9o7dnvgXQr>IxL0PaNpH1exFu-uZgX!mNREqHCD)YWa~56pP@QF%7DJh_FzyaE^cd#G?#m43N=BzTR( zahYaz`4WQ%&0-;^SS2lz)`yojwtS-@FZ~rFn5{codj@v;v)T==vbx3ahfdcTG-Q`m zFRVAIp6XDlNkRsyiY#w%GQLY8MEC*BDT0ytHk;2kR@8QtyEEfQL9M16j#i_sSr=uv z?`O4$aZX;q05c*8fb7q~frQtB6~CR_NbK~~ei)QpYni&^rmLZtg-i{BYQ%KT0HASO z;BRmH7$`+>e(OoDk#YVLEOvSUm;kDGxOz<#Tp9#icW}J9aeifGWl_%;_ECk;oCdsR zl8Yn;Qls|zp6n+GW@~*J(0|UpZ#dL_T)tU3<(@7S2D9_c1X}*g3@{=qc2HLHCc2QB zYsxl3Weorh1L;IYcYewrMZhGH6<_T1nEYjr-29Q6loV>BVTsm!^s^o#8YlkeJ>3ww zDi71Y=6=$Z7SC>@>4(Zokrl3EslsV9GsbU2vbe6QK7_um|g=J zo?C$M3uTh zmrsx&4O?y9g^o9+j0~v}|MDRmY9j6@)88o6j>eVvV`EybJI!ReUi~k(9a$^e!hTQj zjdxC|K-|#Y2acrww-x`~9sYBH`p-r2|Mj+fZg>BuXX!R5K86Qe@b9y=cDmMhHQ<+j E1Jiw82LJ#7 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/post_sign/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/post_sign/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2537ce0d8181891c4a5d48ba8f5f7f970d9b1775 GIT binary patch literal 11566 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 QK4>~aJ<~sGZaO{rHzw8$I{*Lx literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/review/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/review/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..717ac4ef6dfd7c1cd581b0850e25715e26508eb0 GIT binary patch literal 11407 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/review/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_missing_extra_data/review/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3589b68c2970896b58d7e25faa7c2984d24b7b50 GIT binary patch literal 14356 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/post_sign/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/post_sign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0228e5e9effde14d5eaeca78065bc01d6616037d GIT binary patch literal 8199 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 E1Jiw82LJ#7 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/post_sign/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/post_sign/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2537ce0d8181891c4a5d48ba8f5f7f970d9b1775 GIT binary patch literal 11566 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 QK4>~aJ<~sGZaO{rHzw8$I{*Lx literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/review/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/review/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..717ac4ef6dfd7c1cd581b0850e25715e26508eb0 GIT binary patch literal 11407 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/review/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_unexpected_extra_data/review/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3589b68c2970896b58d7e25faa7c2984d24b7b50 GIT binary patch literal 14356 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/post_sign/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/post_sign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba6d27d54b4822fd99ae9090331657d0e5645cf GIT binary patch literal 5153 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 E4-$a#1ONa4 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/post_sign/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/post_sign/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2537ce0d8181891c4a5d48ba8f5f7f970d9b1775 GIT binary patch literal 11566 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 QK4>~aJ<~sGZaO{rHzw8$I{*Lx literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/review/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/review/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..717ac4ef6dfd7c1cd581b0850e25715e26508eb0 GIT binary patch literal 11407 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/review/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_1/review/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3589b68c2970896b58d7e25faa7c2984d24b7b50 GIT binary patch literal 14356 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/post_sign/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/post_sign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..2ba6d27d54b4822fd99ae9090331657d0e5645cf GIT binary patch literal 5153 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 E4-$a#1ONa4 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/post_sign/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/post_sign/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2537ce0d8181891c4a5d48ba8f5f7f970d9b1775 GIT binary patch literal 11566 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 QK4>~aJ<~sGZaO{rHzw8$I{*Lx literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/review/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/review/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..717ac4ef6dfd7c1cd581b0850e25715e26508eb0 GIT binary patch literal 11407 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/review/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_valid_2/review/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3589b68c2970896b58d7e25faa7c2984d24b7b50 GIT binary patch literal 14356 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/post_sign/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/post_sign/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..0228e5e9effde14d5eaeca78065bc01d6616037d GIT binary patch literal 8199 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 E1Jiw82LJ#7 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/post_sign/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/post_sign/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2537ce0d8181891c4a5d48ba8f5f7f970d9b1775 GIT binary patch literal 11566 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 QK4>~aJ<~sGZaO{rHzw8$I{*Lx literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/review/00000.png b/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/review/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..717ac4ef6dfd7c1cd581b0850e25715e26508eb0 GIT binary patch literal 11407 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 literal 0 HcmV?d00001 diff --git a/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/review/00001.png b/test/python/snapshots/stax/test_bitcoin_thorswap_wrong_hash/review/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..3589b68c2970896b58d7e25faa7c2984d24b7b50 GIT binary patch literal 14356 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 A{Qv*} literal 0 HcmV?d00001 diff --git a/test/python/test_bitcoin.py b/test/python/test_bitcoin.py index 111cc01b..f8f1ba88 100644 --- a/test/python/test_bitcoin.py +++ b/test/python/test_bitcoin.py @@ -1,9 +1,11 @@ import pytest +from .apps.exchange import PayinExtraDataID from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO from .apps.bitcoin import BitcoinClient, BitcoinErrors from .apps import cal as cal from ledger_bitcoin import WalletPolicy +from hashlib import sha256 in_wallet = WalletPolicy( "", @@ -13,7 +15,7 @@ ], ) -out_wallet = WalletPolicy( +out_wallet_1 = WalletPolicy( "", "wpkh(@0/**)", [ @@ -29,38 +31,50 @@ ], ) +opreturn_data_1 = bytes.fromhex("CAFE") +opreturn_data_2 = bytes.fromhex("CAFEDECA00DECA00CAFE00DEADBEEF123456789012345678901234567890123456789012345CAFEDECA00DECA00CAFE00DEADBEEF123456789012345678901234567890123456789012345") + + # ExchangeTestRunner implementation for Bitcoin class BitcoinTests(ExchangeTestRunner): currency_configuration = cal.BTC_CURRENCY_CONFIGURATION - valid_destination_1 = BitcoinClient.get_address_from_wallet(out_wallet) - valid_destination_memo_1 = "" + valid_destination_1 = BitcoinClient.get_address_from_wallet(out_wallet_1) valid_destination_2 = BitcoinClient.get_address_from_wallet(out_wallet_2) - valid_destination_memo_2 = "0" valid_refund = BitcoinClient.get_address_from_wallet(in_wallet) - valid_refund_memo = "" valid_send_amount_1 = 20900000 valid_send_amount_2 = 446739662 valid_fees_1 = 100000 valid_fees_2 = 10078 fake_refund = "abcdabcd" - fake_refund_memo = "" fake_payout = "abcdabcd" - fake_payout_memo = "" signature_refusal_error_code = BitcoinErrors.SW_SWAP_CHECKING_FAIL + valid_payin_extra_data_1 = PayinExtraDataID.OP_RETURN.to_bytes(1, byteorder='big') + sha256(opreturn_data_1).digest() + valid_payin_extra_data_2 = PayinExtraDataID.OP_RETURN.to_bytes(1, byteorder='big') + sha256(opreturn_data_2).digest() + invalid_payin_extra_data = PayinExtraDataID.EVM_CALLDATA.to_bytes(1, byteorder='big') + sha256(opreturn_data_1).digest() def perform_final_tx(self, destination, send_amount, fees, memo): - if destination == BitcoinClient.get_address_from_wallet(out_wallet): - BitcoinClient(self.backend).send_simple_sign_tx(in_wallet=in_wallet, - fees=fees, - destination=out_wallet, - send_amount=send_amount) + if destination == self.valid_destination_1: + wallet = out_wallet_1 + elif destination == self.valid_destination_2: + wallet = out_wallet_2 + else: + assert False - elif destination == BitcoinClient.get_address_from_wallet(out_wallet_2): - BitcoinClient(self.backend).send_simple_sign_tx(in_wallet=in_wallet, - fees=fees, - destination=out_wallet_2, - send_amount=send_amount) + if memo == self.valid_payin_extra_data_1: + opreturn_data = opreturn_data_1 + elif memo == self.valid_payin_extra_data_2: + opreturn_data = opreturn_data_2 + elif memo == self.invalid_payin_extra_data: + opreturn_data = opreturn_data_1 + else: + opreturn_data = None + + BitcoinClient(self.backend).send_simple_sign_tx(in_wallet=in_wallet, + fees=fees, + destination=wallet, + send_amount=send_amount, + opreturn_data=opreturn_data) # TODO : assert signature validity @@ -71,4 +85,3 @@ class TestsBitcoin: @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO) def test_bitcoin(self, backend, exchange_navigation_helper, test_to_run): BitcoinTests(backend, exchange_navigation_helper).run_test(test_to_run) - diff --git a/test/python/test_ethereum.py b/test/python/test_ethereum.py index ce34eada..cb5ae591 100644 --- a/test/python/test_ethereum.py +++ b/test/python/test_ethereum.py @@ -3,7 +3,7 @@ import json from web3 import Web3 -from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO +from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP from .apps.ethereum import ETH_PATH from ledger_app_clients.ethereum.client import EthAppClient from .apps import cal as cal @@ -12,19 +12,14 @@ # ExchangeTestRunner implementation for all Ethereum network class GenericEthereumNetworkTests(ExchangeTestRunner): valid_destination_1 = "0xd692Cb1346262F584D17B4B470954501f6715a82" - valid_destination_memo_1 = "" valid_destination_2 = "0x999999cf1046e68e36E1aA2E0E07105eDDD1f08E" - valid_destination_memo_2 = "" valid_refund = "0xDad77910DbDFdE764fC21FCD4E74D71bBACA6D8D" - valid_refund_memo = "" valid_send_amount_1 = 10000000 valid_send_amount_2 = 446739662 valid_fees_1 = 100 valid_fees_2 = 10078 fake_refund = "abcdabcd" - fake_refund_memo = "" fake_payout = "abcdabcd" - fake_payout_memo = "" signature_refusal_error_code = 0x6001 def perform_final_tx(self, destination, send_amount, fees, memo): @@ -49,7 +44,7 @@ class EthereumTests(GenericEthereumNetworkTests): currency_configuration = cal.ETH_CURRENCY_CONFIGURATION class TestsEthereum: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP) def test_ethereum(self, backend, exchange_navigation_helper, test_to_run): EthereumTests(backend, exchange_navigation_helper).run_test(test_to_run) @@ -61,7 +56,7 @@ class BSCTests(GenericEthereumNetworkTests): currency_configuration = cal.BNB_CURRENCY_CONFIGURATION class TestsBSC: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP) def test_bsc(self, backend, exchange_navigation_helper, test_to_run): BSCTests(backend, exchange_navigation_helper).run_test(test_to_run) @@ -73,7 +68,7 @@ class BSCLegacyTests(GenericEthereumNetworkTests): currency_configuration = cal.BNB_LEGACY_CURRENCY_CONFIGURATION class TestsBSCLegacy: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP) def test_bsc_legacy(self, backend, exchange_navigation_helper, test_to_run): BSCLegacyTests(backend, exchange_navigation_helper).run_test(test_to_run) @@ -105,6 +100,6 @@ def perform_final_tx(self, destination, send_amount, fees, memo): pass class TestsDAI: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP) def test_dai(self, backend, exchange_navigation_helper, test_to_run): DAITests(backend, exchange_navigation_helper).run_test(test_to_run) diff --git a/test/python/test_extra_data.py b/test/python/test_extra_data.py new file mode 100644 index 00000000..471f8530 --- /dev/null +++ b/test/python/test_extra_data.py @@ -0,0 +1,94 @@ +import pytest +from dataclasses import dataclass +from ragger.utils import prefix_with_len +from ragger.error import ExceptionRAPDU +from typing import Optional + +from .apps.exchange import ExchangeClient, Rate, SubCommand, Errors +from .apps.litecoin import LitecoinClient + +from .apps.signing_authority import SigningAuthority, LEDGER_SIGNER +from .apps.exchange_transaction_builder import get_partner_curve, craft_and_sign_tx, ALL_SUBCOMMANDS, get_credentials +from .apps import cal as cal +from .utils import handle_lib_call_start_or_stop + +CURRENCY_FROM = cal.BTC_CURRENCY_CONFIGURATION +CURRENCY_TO = cal.ETH_CURRENCY_CONFIGURATION + +@dataclass +class ConfForTest: + payin_extra_id: Optional[str] + payin_extra_data: Optional[bytes] + valid: bool + + +class TestExtraData: + + @pytest.mark.parametrize('configurations', [ + # Having both is not allowed + ConfForTest(payin_extra_id="abcdefghijklmnopqrs", + payin_extra_data=bytes.fromhex("01000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"), + valid=False), + # Having both is not allowed + ConfForTest(payin_extra_id="a", + payin_extra_data=bytes.fromhex("0000"), + valid=False), + # Having both is not allowed + ConfForTest(payin_extra_id="a", + payin_extra_data=bytes.fromhex("01"), + valid=False), + # payin_extra_data must be 33 if used + ConfForTest(payin_extra_id=None, + payin_extra_data=bytes.fromhex("01000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E"), + valid=False), + # Having neither is allowed + ConfForTest(payin_extra_id=None, + payin_extra_data=None, + valid=True), + # Having only one is allowed + ConfForTest(payin_extra_id="abcdefghijklmnopqrs", + payin_extra_data=None, + valid=True), + # Having only one is allowed + ConfForTest(payin_extra_id=None, + payin_extra_data=bytes.fromhex("01000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"), + valid=True), + # payin_extra_data with only NATIVE inside does not count as being used + ConfForTest(payin_extra_id="abcdefghijklmnopqrs", + payin_extra_data=bytes.fromhex("00"), + valid=True), + ]) + def test_extra_data_and_or_extra_id(self, backend, configurations): + ex = ExchangeClient(backend, Rate.FIXED, SubCommand.SWAP_NG) + partner = SigningAuthority(curve=get_partner_curve(SubCommand.SWAP_NG), name="Default name") + + transaction_id = ex.init_transaction().data + credentials = get_credentials(SubCommand.SWAP_NG, partner) + ex.set_partner_key(credentials) + ex.check_partner_key(LEDGER_SIGNER.sign(credentials)) + tx_infos = { + "payin_address": "LKY4hyq7ucxtdGoQ6ajkwv4ddTNA4WpYhF", + "refund_address": "MJovkMvQ2rXXUj7TGVvnQyVMWghSdqZsmu", + "payout_address": "0xDad77910DbDFdE764fC21FCD4E74D71bBACA6D8D", + "refund_extra_id": "", + "payout_extra_id": "", + "currency_from": CURRENCY_FROM.ticker, + "currency_to": CURRENCY_TO.ticker, + "amount_to_provider": b"\010T2V", + "amount_to_wallet": b"\246\333t\233+\330\000", + } + if configurations.payin_extra_id is not None: + tx_infos["payin_extra_id"] = configurations.payin_extra_id + if configurations.payin_extra_data is not None: + tx_infos["payin_extra_data"] = configurations.payin_extra_data + + fees = 339 + + tx, tx_signature = craft_and_sign_tx(SubCommand.SWAP_NG, tx_infos, transaction_id, fees, partner) + + if configurations.valid: + ex.process_transaction(tx) + else: + with pytest.raises(ExceptionRAPDU) as e: + ex.process_transaction(tx) + assert e.value.status == Errors.WRONG_EXTRA_ID_OR_EXTRA_DATA diff --git a/test/python/test_polkadot.py b/test/python/test_polkadot.py index df63e9b3..3f4b3b57 100644 --- a/test/python/test_polkadot.py +++ b/test/python/test_polkadot.py @@ -1,6 +1,6 @@ import pytest -from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO_AND_FEES +from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO_THORSWAP_AND_FEES from .apps.polkadot import PolkadotClient, ERR_SWAP_CHECK_WRONG_METHOD, ERR_SWAP_CHECK_WRONG_DEST_ADDR, ERR_SWAP_CHECK_WRONG_AMOUNT from .apps import cal as cal @@ -8,19 +8,14 @@ class PolkadotTests(ExchangeTestRunner): currency_configuration = cal.DOT_CURRENCY_CONFIGURATION valid_destination_1 = "14ypt3a2m9yiq4ZQDcJFrkD99C3ZoUjLCDz1gBpCDwJPqVDY" - valid_destination_memo_1 = "" valid_destination_2 = "13zAiMiN2HdJfEXn4NkVCWxuemScdaXGYKJrbJr1Nt6kjBRD" - valid_destination_memo_2 = "" valid_refund = "14TwSqXEoCPK7Q7Jnk2RFzbPZXppsxz24bHaQ7fakwio7DFn" - valid_refund_memo = "" valid_send_amount_1 = 12345670000 valid_send_amount_2 = 446739662 valid_fees_1 = 100000000 valid_fees_2 = 10000123 fake_refund = "abcdabcd" - fake_refund_memo = "" fake_payout = "abcdabcd" - fake_payout_memo = "" wrong_method_error_code = ERR_SWAP_CHECK_WRONG_METHOD wrong_destination_error_code = ERR_SWAP_CHECK_WRONG_DEST_ADDR wrong_amount_error_code = ERR_SWAP_CHECK_WRONG_AMOUNT @@ -43,6 +38,6 @@ def perform_final_tx(self, destination, send_amount, fees, memo): # Use a class to reuse the same Speculos instance class TestsPolkadot: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_AND_FEES) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_THORSWAP_AND_FEES) def test_polkadot(self, backend, exchange_navigation_helper, test_to_run): PolkadotTests(backend, exchange_navigation_helper).run_test(test_to_run) diff --git a/test/python/test_ripple.py b/test/python/test_ripple.py index e9e8cfde..bccfc740 100644 --- a/test/python/test_ripple.py +++ b/test/python/test_ripple.py @@ -1,6 +1,6 @@ import pytest -from .apps.exchange_test_runner import ExchangeTestRunner, SWAP_TESTS +from .apps.exchange_test_runner import ExchangeTestRunner, SWAP_TESTS_EXCEPT_THORSWAP from .apps.xrp import XRPClient, DEFAULT_PATH, XRP_PACKED_DERIVATION_PATH, RippleErrors from .apps import cal as cal @@ -36,6 +36,6 @@ def perform_final_tx(self, destination, send_amount, fees, memo): # Use a class to reuse the same Speculos instance class TestsRipple: - @pytest.mark.parametrize('test_to_run', SWAP_TESTS) + @pytest.mark.parametrize('test_to_run', SWAP_TESTS_EXCEPT_THORSWAP) def test_ripple(self, backend, exchange_navigation_helper, test_to_run): RippleTests(backend, exchange_navigation_helper).run_test(test_to_run) diff --git a/test/python/test_solana.py b/test/python/test_solana.py index 3f78907e..b428592b 100644 --- a/test/python/test_solana.py +++ b/test/python/test_solana.py @@ -1,6 +1,6 @@ import pytest -from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO_AND_FEES +from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO_THORSWAP_AND_FEES from .apps.solana import SolanaClient, ErrorType from .apps.solana_utils import SOL_PACKED_DERIVATION_PATH from .apps.solana_cmd_builder import SystemInstructionTransfer, Message, verify_signature @@ -17,19 +17,14 @@ class SolanaTests(ExchangeTestRunner): currency_configuration = cal.SOL_CURRENCY_CONFIGURATION valid_destination_1 = SOL.FOREIGN_ADDRESS - valid_destination_memo_1 = "" valid_destination_2 = SOL.FOREIGN_ADDRESS_2 - valid_destination_memo_2 = "" valid_refund = SOL.OWNED_ADDRESS - valid_refund_memo = "" valid_send_amount_1 = SOL.AMOUNT valid_send_amount_2 = SOL.AMOUNT_2 valid_fees_1 = SOL.FEES valid_fees_2 = SOL.FEES_2 fake_refund = SOL.FOREIGN_ADDRESS - fake_refund_memo = "" fake_payout = SOL.FOREIGN_ADDRESS - fake_payout_memo = "" signature_refusal_error_code = ErrorType.SOLANA_SUMMARY_FINALIZE_FAILED partner_name = "Partner name" @@ -50,6 +45,6 @@ def perform_final_tx(self, destination, send_amount, fees, memo): # Use a class to reuse the same Speculos instance class TestsSolana: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_AND_FEES) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_THORSWAP_AND_FEES) def test_solana(self, backend, exchange_navigation_helper, test_to_run): SolanaTests(backend, exchange_navigation_helper).run_test(test_to_run) diff --git a/test/python/test_stellar.py b/test/python/test_stellar.py index 40efa9f0..b0a9e89f 100644 --- a/test/python/test_stellar.py +++ b/test/python/test_stellar.py @@ -1,6 +1,6 @@ import pytest -from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS +from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_THORSWAP from .apps.stellar import Network, StellarClient, StellarErrors from .apps import cal as cal @@ -36,6 +36,6 @@ def perform_final_tx(self, destination, send_amount, fees, memo): # Use a class to reuse the same Speculos instance class TestsStellar: - @pytest.mark.parametrize('test_to_run', ALL_TESTS) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_THORSWAP) def test_stellar(self, backend, exchange_navigation_helper, test_to_run): StellarTests(backend, exchange_navigation_helper).run_test(test_to_run) diff --git a/test/python/test_tezos.py b/test/python/test_tezos.py index 356b1ed4..d7b37c43 100644 --- a/test/python/test_tezos.py +++ b/test/python/test_tezos.py @@ -1,6 +1,6 @@ import pytest -from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO +from .apps.exchange_test_runner import ExchangeTestRunner, ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP from .apps.tezos import TezosClient, encode_address, XTZ_PACKED_DERIVATION_PATH, StatusCode from .apps import cal as cal @@ -18,19 +18,14 @@ class TezosTests(ExchangeTestRunner): currency_configuration = cal.XTZ_CURRENCY_CONFIGURATION valid_destination_1 = encode_address("e6330795ffe18f873b83cb13662442b87bd98c22") - valid_destination_memo_1 = "" valid_destination_2 = encode_address("e6330795ffe18f873b83cb13662442b87bd98c40") - valid_destination_memo_2 = "0" valid_refund = "tz1YPjCVqgimTAPmxZX9egDeTFRCmrTRqmp9" - valid_refund_memo = "" valid_send_amount_1 = 10000000 valid_send_amount_2 = 446739662 valid_fees_1 = 100 valid_fees_2 = 10078 fake_refund = "abcdabcd" - fake_refund_memo = "" fake_payout = "abcdabcd" - fake_payout_memo = "" signature_refusal_error_code = StatusCode.EXC_REJECT def perform_final_tx(self, destination, send_amount, fees, memo): @@ -47,6 +42,6 @@ def perform_final_tx(self, destination, send_amount, fees, memo): # Use a class to reuse the same Speculos instance class TestsTezos: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_MEMO_AND_THORSWAP) def test_tezos(self, backend, exchange_navigation_helper, test_to_run): TezosTests(backend, exchange_navigation_helper).run_test(test_to_run) diff --git a/test/python/test_tron.py b/test/python/test_tron.py index bc78d4a3..77293557 100644 --- a/test/python/test_tron.py +++ b/test/python/test_tron.py @@ -3,7 +3,7 @@ from ragger.error import ExceptionRAPDU from .apps.exchange_test_runner import ExchangeTestRunner -from .apps.exchange_test_runner import VALID_TESTS, ALL_TESTS_EXCEPT_FEES +from .apps.exchange_test_runner import VALID_TESTS, ALL_TESTS_EXCEPT_THORSWAP_AND_FEES from .apps.tron import TronClient, TronErrors from .apps import cal as cal @@ -43,7 +43,7 @@ def perform_final_tx(self, destination, send_amount, fees, memo): class TestsTrx: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_FEES) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_THORSWAP_AND_FEES) def test_tron_trx(self, backend, exchange_navigation_helper, test_to_run): TronTrxTests(backend, exchange_navigation_helper).run_test(test_to_run) @@ -64,7 +64,7 @@ def perform_final_tx(self, destination, send_amount, fees, memo): class TestsUsdt: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_FEES) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_THORSWAP_AND_FEES) def test_tron_usdt(self, backend, exchange_navigation_helper, test_to_run): TronUsdtTests(backend, exchange_navigation_helper).run_test(test_to_run) @@ -85,7 +85,7 @@ def perform_final_tx(self, destination, send_amount, fees, memo): class TestsUsdc: - @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_FEES) + @pytest.mark.parametrize('test_to_run', ALL_TESTS_EXCEPT_THORSWAP_AND_FEES) def test_tron_usdc(self, backend, exchange_navigation_helper, test_to_run): TronUsdcTests(backend, exchange_navigation_helper).run_test(test_to_run)