From 665057b35426893021141d43309ece18744089b9 Mon Sep 17 00:00:00 2001 From: neithanmo Date: Thu, 10 Oct 2024 05:20:16 -0600 Subject: [PATCH] Some improvements to avoid panicking and enhance remainder handling in case of multisig transactions More improvements in project structure Ensure to parse all contract arguments avoiding potential errors during transaction review Increase recursion limit to 8 nested clarity values, this does not hit any limits regarding nanos2 add snapshots feat/ add debug implementation Restructure the post-conditions into its own folder and module Update zxformat to use ledger-zxlib when compiling to ledger targets Add test to parsed transaction containing post-conditions Bump app version --- app/Makefile.version | 2 +- app/rust/Cargo.lock | 24 + app/rust/Cargo.toml | 3 + app/rust/src/parser/ffi.rs | 3 + app/rust/src/parser/message.rs | 14 +- app/rust/src/parser/mod.rs | 6 +- app/rust/src/parser/parsed_obj.rs | 53 ++ app/rust/src/parser/parser_common.rs | 5 +- .../{post_condition.rs => post_conditions.rs} | 207 +----- .../src/parser/post_conditions/fungible.rs | 33 + .../parser/post_conditions/non_fungible.rs | 24 + .../post_condition_principal.rs | 121 ++++ app/rust/src/parser/spending_condition.rs | 5 +- app/rust/src/parser/structured_msg.rs | 5 +- app/rust/src/parser/transaction.rs | 305 +++------ app/rust/src/parser/transaction_payload.rs | 620 +----------------- .../parser/transaction_payload/arguments.rs | 75 +++ .../transaction_payload/contract_call.rs | 302 +++++++++ .../transaction_payload/smart_contract.rs | 74 +++ .../transaction_payload/token_transfer.rs | 139 ++++ .../transaction_payload/versioned_contract.rs | 82 +++ app/rust/src/parser/tx_post_conditions.rs | 169 +++++ app/rust/src/zxformat.rs | 180 ++--- .../fl-contract_call_long_args/00000.png | Bin 0 -> 8856 bytes .../fl-contract_call_long_args/00001.png | Bin 0 -> 16198 bytes .../fl-contract_call_long_args/00002.png | Bin 0 -> 16903 bytes .../fl-contract_call_long_args/00003.png | Bin 0 -> 17845 bytes .../fl-contract_call_long_args/00004.png | Bin 0 -> 19830 bytes .../fl-contract_call_long_args/00005.png | Bin 0 -> 6679 bytes .../fl-contract_call_long_args/00006.png | Bin 0 -> 9530 bytes .../fl-contract_call_long_args/00007.png | Bin 0 -> 12845 bytes tests_zemu/snapshots/fl-mainmenu/00004.png | Bin 9265 -> 9428 bytes .../fl-swap_with_post_conditions/00000.png | Bin 0 -> 8955 bytes .../fl-swap_with_post_conditions/00001.png | Bin 0 -> 16321 bytes .../fl-swap_with_post_conditions/00002.png | Bin 0 -> 17009 bytes .../fl-swap_with_post_conditions/00003.png | Bin 0 -> 17940 bytes .../fl-swap_with_post_conditions/00004.png | Bin 0 -> 19894 bytes .../fl-swap_with_post_conditions/00005.png | Bin 0 -> 18229 bytes .../fl-swap_with_post_conditions/00006.png | Bin 0 -> 18440 bytes .../fl-swap_with_post_conditions/00007.png | Bin 0 -> 18592 bytes .../fl-swap_with_post_conditions/00008.png | Bin 0 -> 7223 bytes .../fl-swap_with_post_conditions/00009.png | Bin 0 -> 9906 bytes .../fl-swap_with_post_conditions/00010.png | Bin 0 -> 12845 bytes .../s-contract_call_long_args/00000.png | Bin 0 -> 597 bytes .../s-contract_call_long_args/00001.png | Bin 0 -> 412 bytes .../s-contract_call_long_args/00002.png | Bin 0 -> 246 bytes .../s-contract_call_long_args/00003.png | Bin 0 -> 309 bytes .../s-contract_call_long_args/00004.png | Bin 0 -> 461 bytes .../s-contract_call_long_args/00005.png | Bin 0 -> 429 bytes .../s-contract_call_long_args/00006.png | Bin 0 -> 368 bytes .../s-contract_call_long_args/00007.png | Bin 0 -> 279 bytes .../s-contract_call_long_args/00008.png | Bin 0 -> 695 bytes .../s-contract_call_long_args/00009.png | Bin 0 -> 385 bytes .../s-contract_call_long_args/00010.png | Bin 0 -> 258 bytes .../s-contract_call_long_args/00011.png | Bin 0 -> 373 bytes .../s-contract_call_long_args/00012.png | Bin 0 -> 707 bytes .../s-contract_call_long_args/00013.png | Bin 0 -> 545 bytes .../s-contract_call_long_args/00014.png | Bin 0 -> 280 bytes .../s-contract_call_long_args/00015.png | Bin 0 -> 332 bytes .../s-contract_call_long_args/00016.png | Bin 0 -> 335 bytes .../s-contract_call_long_args/00017.png | Bin 0 -> 249 bytes .../s-contract_call_long_args/00018.png | Bin 0 -> 452 bytes tests_zemu/snapshots/s-mainmenu/00004.png | Bin 455 -> 457 bytes tests_zemu/snapshots/s-mainmenu/00010.png | Bin 455 -> 457 bytes .../s-swap_with_post_conditions/00000.png | Bin 0 -> 597 bytes .../s-swap_with_post_conditions/00001.png | Bin 0 -> 412 bytes .../s-swap_with_post_conditions/00002.png | Bin 0 -> 246 bytes .../s-swap_with_post_conditions/00003.png | Bin 0 -> 309 bytes .../s-swap_with_post_conditions/00004.png | Bin 0 -> 461 bytes .../s-swap_with_post_conditions/00005.png | Bin 0 -> 429 bytes .../s-swap_with_post_conditions/00006.png | Bin 0 -> 368 bytes .../s-swap_with_post_conditions/00007.png | Bin 0 -> 279 bytes .../s-swap_with_post_conditions/00008.png | Bin 0 -> 695 bytes .../s-swap_with_post_conditions/00009.png | Bin 0 -> 385 bytes .../s-swap_with_post_conditions/00010.png | Bin 0 -> 258 bytes .../s-swap_with_post_conditions/00011.png | Bin 0 -> 373 bytes .../s-swap_with_post_conditions/00012.png | Bin 0 -> 707 bytes .../s-swap_with_post_conditions/00013.png | Bin 0 -> 545 bytes .../s-swap_with_post_conditions/00014.png | Bin 0 -> 280 bytes .../s-swap_with_post_conditions/00015.png | Bin 0 -> 332 bytes .../s-swap_with_post_conditions/00016.png | Bin 0 -> 335 bytes .../s-swap_with_post_conditions/00017.png | Bin 0 -> 705 bytes .../s-swap_with_post_conditions/00018.png | Bin 0 -> 396 bytes .../s-swap_with_post_conditions/00019.png | Bin 0 -> 372 bytes .../s-swap_with_post_conditions/00020.png | Bin 0 -> 302 bytes .../s-swap_with_post_conditions/00021.png | Bin 0 -> 705 bytes .../s-swap_with_post_conditions/00022.png | Bin 0 -> 396 bytes .../s-swap_with_post_conditions/00023.png | Bin 0 -> 372 bytes .../s-swap_with_post_conditions/00024.png | Bin 0 -> 302 bytes .../s-swap_with_post_conditions/00025.png | Bin 0 -> 705 bytes .../s-swap_with_post_conditions/00026.png | Bin 0 -> 396 bytes .../s-swap_with_post_conditions/00027.png | Bin 0 -> 372 bytes .../s-swap_with_post_conditions/00028.png | Bin 0 -> 341 bytes .../s-swap_with_post_conditions/00029.png | Bin 0 -> 249 bytes .../s-swap_with_post_conditions/00030.png | Bin 0 -> 452 bytes .../sp-contract_call_long_args/00000.png | Bin 0 -> 486 bytes .../sp-contract_call_long_args/00001.png | Bin 0 -> 748 bytes .../sp-contract_call_long_args/00002.png | Bin 0 -> 289 bytes .../sp-contract_call_long_args/00003.png | Bin 0 -> 357 bytes .../sp-contract_call_long_args/00004.png | Bin 0 -> 539 bytes .../sp-contract_call_long_args/00005.png | Bin 0 -> 504 bytes .../sp-contract_call_long_args/00006.png | Bin 0 -> 436 bytes .../sp-contract_call_long_args/00007.png | Bin 0 -> 323 bytes .../sp-contract_call_long_args/00008.png | Bin 0 -> 822 bytes .../sp-contract_call_long_args/00009.png | Bin 0 -> 312 bytes .../sp-contract_call_long_args/00010.png | Bin 0 -> 438 bytes .../sp-contract_call_long_args/00011.png | Bin 0 -> 921 bytes .../sp-contract_call_long_args/00012.png | Bin 0 -> 461 bytes .../sp-contract_call_long_args/00013.png | Bin 0 -> 319 bytes .../sp-contract_call_long_args/00014.png | Bin 0 -> 379 bytes .../sp-contract_call_long_args/00015.png | Bin 0 -> 378 bytes .../sp-contract_call_long_args/00016.png | Bin 0 -> 355 bytes .../sp-contract_call_long_args/00017.png | Bin 0 -> 511 bytes tests_zemu/snapshots/sp-mainmenu/00004.png | Bin 380 -> 389 bytes tests_zemu/snapshots/sp-mainmenu/00010.png | Bin 380 -> 389 bytes .../sp-swap_with_post_conditions/00000.png | Bin 0 -> 486 bytes .../sp-swap_with_post_conditions/00001.png | Bin 0 -> 748 bytes .../sp-swap_with_post_conditions/00002.png | Bin 0 -> 289 bytes .../sp-swap_with_post_conditions/00003.png | Bin 0 -> 357 bytes .../sp-swap_with_post_conditions/00004.png | Bin 0 -> 539 bytes .../sp-swap_with_post_conditions/00005.png | Bin 0 -> 504 bytes .../sp-swap_with_post_conditions/00006.png | Bin 0 -> 436 bytes .../sp-swap_with_post_conditions/00007.png | Bin 0 -> 323 bytes .../sp-swap_with_post_conditions/00008.png | Bin 0 -> 822 bytes .../sp-swap_with_post_conditions/00009.png | Bin 0 -> 312 bytes .../sp-swap_with_post_conditions/00010.png | Bin 0 -> 438 bytes .../sp-swap_with_post_conditions/00011.png | Bin 0 -> 921 bytes .../sp-swap_with_post_conditions/00012.png | Bin 0 -> 461 bytes .../sp-swap_with_post_conditions/00013.png | Bin 0 -> 319 bytes .../sp-swap_with_post_conditions/00014.png | Bin 0 -> 379 bytes .../sp-swap_with_post_conditions/00015.png | Bin 0 -> 378 bytes .../sp-swap_with_post_conditions/00016.png | Bin 0 -> 846 bytes .../sp-swap_with_post_conditions/00017.png | Bin 0 -> 421 bytes .../sp-swap_with_post_conditions/00018.png | Bin 0 -> 354 bytes .../sp-swap_with_post_conditions/00019.png | Bin 0 -> 846 bytes .../sp-swap_with_post_conditions/00020.png | Bin 0 -> 421 bytes .../sp-swap_with_post_conditions/00021.png | Bin 0 -> 354 bytes .../sp-swap_with_post_conditions/00022.png | Bin 0 -> 846 bytes .../sp-swap_with_post_conditions/00023.png | Bin 0 -> 421 bytes .../sp-swap_with_post_conditions/00024.png | Bin 0 -> 398 bytes .../sp-swap_with_post_conditions/00025.png | Bin 0 -> 355 bytes .../sp-swap_with_post_conditions/00026.png | Bin 0 -> 511 bytes .../st-contract_call_long_args/00000.png | Bin 0 -> 8413 bytes .../st-contract_call_long_args/00001.png | Bin 0 -> 19067 bytes .../st-contract_call_long_args/00002.png | Bin 0 -> 19917 bytes .../st-contract_call_long_args/00003.png | Bin 0 -> 20213 bytes .../st-contract_call_long_args/00004.png | Bin 0 -> 6377 bytes .../st-contract_call_long_args/00005.png | Bin 0 -> 8989 bytes .../st-contract_call_long_args/00006.png | Bin 0 -> 11174 bytes tests_zemu/snapshots/st-mainmenu/00004.png | Bin 11074 -> 11194 bytes .../st-swap_with_post_conditions/00000.png | Bin 0 -> 8468 bytes .../st-swap_with_post_conditions/00001.png | Bin 0 -> 19099 bytes .../st-swap_with_post_conditions/00002.png | Bin 0 -> 19918 bytes .../st-swap_with_post_conditions/00003.png | Bin 0 -> 20225 bytes .../st-swap_with_post_conditions/00004.png | Bin 0 -> 18172 bytes .../st-swap_with_post_conditions/00005.png | Bin 0 -> 24160 bytes .../st-swap_with_post_conditions/00006.png | Bin 0 -> 9142 bytes .../st-swap_with_post_conditions/00007.png | Bin 0 -> 8999 bytes .../st-swap_with_post_conditions/00008.png | Bin 0 -> 11174 bytes .../x-contract_call_long_args/00000.png | Bin 0 -> 486 bytes .../x-contract_call_long_args/00001.png | Bin 0 -> 748 bytes .../x-contract_call_long_args/00002.png | Bin 0 -> 289 bytes .../x-contract_call_long_args/00003.png | Bin 0 -> 357 bytes .../x-contract_call_long_args/00004.png | Bin 0 -> 539 bytes .../x-contract_call_long_args/00005.png | Bin 0 -> 504 bytes .../x-contract_call_long_args/00006.png | Bin 0 -> 436 bytes .../x-contract_call_long_args/00007.png | Bin 0 -> 323 bytes .../x-contract_call_long_args/00008.png | Bin 0 -> 822 bytes .../x-contract_call_long_args/00009.png | Bin 0 -> 312 bytes .../x-contract_call_long_args/00010.png | Bin 0 -> 438 bytes .../x-contract_call_long_args/00011.png | Bin 0 -> 921 bytes .../x-contract_call_long_args/00012.png | Bin 0 -> 461 bytes .../x-contract_call_long_args/00013.png | Bin 0 -> 319 bytes .../x-contract_call_long_args/00014.png | Bin 0 -> 379 bytes .../x-contract_call_long_args/00015.png | Bin 0 -> 378 bytes .../x-contract_call_long_args/00016.png | Bin 0 -> 355 bytes .../x-contract_call_long_args/00017.png | Bin 0 -> 511 bytes tests_zemu/snapshots/x-mainmenu/00004.png | Bin 380 -> 389 bytes tests_zemu/snapshots/x-mainmenu/00010.png | Bin 380 -> 389 bytes .../x-swap_with_post_conditions/00000.png | Bin 0 -> 486 bytes .../x-swap_with_post_conditions/00001.png | Bin 0 -> 748 bytes .../x-swap_with_post_conditions/00002.png | Bin 0 -> 289 bytes .../x-swap_with_post_conditions/00003.png | Bin 0 -> 357 bytes .../x-swap_with_post_conditions/00004.png | Bin 0 -> 539 bytes .../x-swap_with_post_conditions/00005.png | Bin 0 -> 504 bytes .../x-swap_with_post_conditions/00006.png | Bin 0 -> 436 bytes .../x-swap_with_post_conditions/00007.png | Bin 0 -> 323 bytes .../x-swap_with_post_conditions/00008.png | Bin 0 -> 822 bytes .../x-swap_with_post_conditions/00009.png | Bin 0 -> 312 bytes .../x-swap_with_post_conditions/00010.png | Bin 0 -> 438 bytes .../x-swap_with_post_conditions/00011.png | Bin 0 -> 921 bytes .../x-swap_with_post_conditions/00012.png | Bin 0 -> 461 bytes .../x-swap_with_post_conditions/00013.png | Bin 0 -> 319 bytes .../x-swap_with_post_conditions/00014.png | Bin 0 -> 379 bytes .../x-swap_with_post_conditions/00015.png | Bin 0 -> 378 bytes .../x-swap_with_post_conditions/00016.png | Bin 0 -> 846 bytes .../x-swap_with_post_conditions/00017.png | Bin 0 -> 421 bytes .../x-swap_with_post_conditions/00018.png | Bin 0 -> 354 bytes .../x-swap_with_post_conditions/00019.png | Bin 0 -> 846 bytes .../x-swap_with_post_conditions/00020.png | Bin 0 -> 421 bytes .../x-swap_with_post_conditions/00021.png | Bin 0 -> 354 bytes .../x-swap_with_post_conditions/00022.png | Bin 0 -> 846 bytes .../x-swap_with_post_conditions/00023.png | Bin 0 -> 421 bytes .../x-swap_with_post_conditions/00024.png | Bin 0 -> 398 bytes .../x-swap_with_post_conditions/00025.png | Bin 0 -> 355 bytes .../x-swap_with_post_conditions/00026.png | Bin 0 -> 511 bytes tests_zemu/tests/standard.test.ts | 243 ++++++- 207 files changed, 1575 insertions(+), 1119 deletions(-) rename app/rust/src/parser/{post_condition.rs => post_conditions.rs} (74%) create mode 100644 app/rust/src/parser/post_conditions/fungible.rs create mode 100644 app/rust/src/parser/post_conditions/non_fungible.rs create mode 100644 app/rust/src/parser/post_conditions/post_condition_principal.rs create mode 100644 app/rust/src/parser/transaction_payload/arguments.rs create mode 100644 app/rust/src/parser/transaction_payload/contract_call.rs create mode 100644 app/rust/src/parser/transaction_payload/smart_contract.rs create mode 100644 app/rust/src/parser/transaction_payload/token_transfer.rs create mode 100644 app/rust/src/parser/transaction_payload/versioned_contract.rs create mode 100644 app/rust/src/parser/tx_post_conditions.rs create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00000.png create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00001.png create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00002.png create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00003.png create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00004.png create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00005.png create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00006.png create mode 100644 tests_zemu/snapshots/fl-contract_call_long_args/00007.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00000.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00001.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00002.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00003.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00004.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00005.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00006.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00007.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00008.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00009.png create mode 100644 tests_zemu/snapshots/fl-swap_with_post_conditions/00010.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00000.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00001.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00002.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00003.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00004.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00005.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00006.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00007.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00008.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00009.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00010.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00011.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00012.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00013.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00014.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00015.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00016.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00017.png create mode 100644 tests_zemu/snapshots/s-contract_call_long_args/00018.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00000.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00001.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00002.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00003.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00004.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00005.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00006.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00007.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00008.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00009.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00010.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00011.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00012.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00013.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00014.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00015.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00016.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00017.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00018.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00019.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00020.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00021.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00022.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00023.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00024.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00025.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00026.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00027.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00028.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00029.png create mode 100644 tests_zemu/snapshots/s-swap_with_post_conditions/00030.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00000.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00001.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00002.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00003.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00004.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00005.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00006.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00007.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00008.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00009.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00010.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00011.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00012.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00013.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00014.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00015.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00016.png create mode 100644 tests_zemu/snapshots/sp-contract_call_long_args/00017.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00000.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00001.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00002.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00003.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00004.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00005.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00006.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00007.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00008.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00009.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00010.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00011.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00012.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00013.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00014.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00015.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00016.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00017.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00018.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00019.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00020.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00021.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00022.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00023.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00024.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00025.png create mode 100644 tests_zemu/snapshots/sp-swap_with_post_conditions/00026.png create mode 100644 tests_zemu/snapshots/st-contract_call_long_args/00000.png create mode 100644 tests_zemu/snapshots/st-contract_call_long_args/00001.png create mode 100644 tests_zemu/snapshots/st-contract_call_long_args/00002.png create mode 100644 tests_zemu/snapshots/st-contract_call_long_args/00003.png create mode 100644 tests_zemu/snapshots/st-contract_call_long_args/00004.png create mode 100644 tests_zemu/snapshots/st-contract_call_long_args/00005.png create mode 100644 tests_zemu/snapshots/st-contract_call_long_args/00006.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00000.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00001.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00002.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00003.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00004.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00005.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00006.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00007.png create mode 100644 tests_zemu/snapshots/st-swap_with_post_conditions/00008.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00000.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00001.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00002.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00003.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00004.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00005.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00006.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00007.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00008.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00009.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00010.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00011.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00012.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00013.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00014.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00015.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00016.png create mode 100644 tests_zemu/snapshots/x-contract_call_long_args/00017.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00000.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00001.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00002.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00003.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00004.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00005.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00006.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00007.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00008.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00009.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00010.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00011.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00012.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00013.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00014.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00015.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00016.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00017.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00018.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00019.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00020.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00021.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00022.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00023.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00024.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00025.png create mode 100644 tests_zemu/snapshots/x-swap_with_post_conditions/00026.png diff --git a/app/Makefile.version b/app/Makefile.version index 5fbe479b..50b9605a 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -1,3 +1,3 @@ APPVERSION_M=0 APPVERSION_N=24 -APPVERSION_P=4 +APPVERSION_P=5 diff --git a/app/rust/Cargo.lock b/app/rust/Cargo.lock index 65f630f0..6087fe2e 100644 --- a/app/rust/Cargo.lock +++ b/app/rust/Cargo.lock @@ -71,6 +71,12 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "block-buffer" version = "0.9.0" @@ -194,12 +200,29 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "lexical-core" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" +dependencies = [ + "bitflags", + "cfg-if", + "libm", +] + [[package]] name = "libc" version = "0.2.124" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21a41fed9d98f27ab1c6d161da622a4fa35e8a54a8adc24bbf3ddd0ef70b0e50" +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "lock_api" version = "0.4.7" @@ -329,6 +352,7 @@ dependencies = [ "arrayvec", "base64", "hex", + "lexical-core", "no-std-compat", "nom", "numtoa", diff --git a/app/rust/Cargo.toml b/app/rust/Cargo.toml index 21137082..1f0e96cf 100644 --- a/app/rust/Cargo.toml +++ b/app/rust/Cargo.toml @@ -23,6 +23,9 @@ hex = { version = "0.4", default-features = false } serde-json-core = { version = "0.4.0", default-features = false } serde = { version = "1.0", default-features = false, features = ["derive"] } nom = { version = "7.1.2", default-features = false } +lexical-core = { version = "0.7", features = [ + "libm", +], default-features = false } [dependencies.arrayvec] diff --git a/app/rust/src/parser/ffi.rs b/app/rust/src/parser/ffi.rs index d5cc62ca..2d17fd91 100644 --- a/app/rust/src/parser/ffi.rs +++ b/app/rust/src/parser/ffi.rs @@ -225,9 +225,12 @@ pub unsafe extern "C" fn _last_block_ptr( ) -> u16 { if let Some(tx) = parsed_obj_from_state(tx_t as _).and_then(|obj| obj.transaction()) { let block = tx.last_transaction_block(); + *block_ptr = block.as_ptr(); return block.len() as _; } + + *block_ptr = core::ptr::null_mut(); 0 } diff --git a/app/rust/src/parser/message.rs b/app/rust/src/parser/message.rs index 4790a89a..8ff822c6 100644 --- a/app/rust/src/parser/message.rs +++ b/app/rust/src/parser/message.rs @@ -12,6 +12,7 @@ const BYTE_STRING_HEADER_LEN: usize = "\x17Stacks Signed Message:\n".as_bytes(). const MAX_ASCII_LEN: usize = 270; #[repr(C)] +#[cfg_attr(test, derive(Debug))] pub struct Message<'a>(ByteString<'a>); impl<'a> Message<'a> { @@ -45,9 +46,20 @@ impl<'a> Message<'a> { } #[repr(C)] -#[derive(Debug, Copy, Clone, PartialEq)] +#[derive(Copy, Clone, PartialEq)] pub struct ByteString<'a>(&'a [u8]); +#[cfg(test)] +impl<'a> core::fmt::Debug for ByteString<'a> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "ByteString(\"")?; + for byte in self.0 { + write!(f, "{:02x}", byte)?; + } + write!(f, "\")") + } +} + impl<'a> ByteString<'a> { pub fn is_msg(data: &'a [u8]) -> bool { Self::contain_header(data) diff --git a/app/rust/src/parser/mod.rs b/app/rust/src/parser/mod.rs index 8531df4e..f3518d58 100644 --- a/app/rust/src/parser/mod.rs +++ b/app/rust/src/parser/mod.rs @@ -5,13 +5,14 @@ mod jwt; mod message; mod parsed_obj; mod parser_common; -mod post_condition; +mod post_conditions; mod principal; mod spending_condition; mod structured_msg; mod transaction; mod transaction_auth; mod transaction_payload; +mod tx_post_conditions; mod utils; mod value; pub use error::ParserError; @@ -20,10 +21,11 @@ pub use jwt::Jwt; pub use message::{ByteString, Message}; pub use parsed_obj::{ParsedObj, Tag}; pub use parser_common::*; -pub use post_condition::{FungibleConditionCode, TransactionPostCondition}; +pub use post_conditions::{FungibleConditionCode, TransactionPostCondition}; pub use principal::*; pub use structured_msg::{Domain, StructuredMsg}; pub use transaction::Transaction; pub use transaction_auth::TransactionAuth; +pub use tx_post_conditions::{PostConditions, TransactionPostConditionMode}; pub use utils::*; pub use value::{Int128, Tuple, UInt128, Value, ValueId}; diff --git a/app/rust/src/parser/parsed_obj.rs b/app/rust/src/parser/parsed_obj.rs index 2fa43f7f..34463a2b 100644 --- a/app/rust/src/parser/parsed_obj.rs +++ b/app/rust/src/parser/parsed_obj.rs @@ -1,5 +1,7 @@ #![allow(non_camel_case_types, non_snake_case, clippy::missing_safety_doc)] +use crate::bolos::c_zemu_log_stack; + use super::{error::ParserError, transaction::Transaction, Message}; use super::{Jwt, StructuredMsg}; @@ -56,6 +58,7 @@ impl<'a> ParsedObj<'a> { } pub fn read(&mut self, data: &'a [u8]) -> Result<(), ParserError> { + c_zemu_log_stack("ParsedObj::read\x00"); if data.is_empty() { return Err(ParserError::NoData); } @@ -65,15 +68,19 @@ impl<'a> ParsedObj<'a> { unsafe { if Message::is_message(data) { + c_zemu_log_stack("Tag::Msg\x00"); self.tag = Tag::Message; self.obj.read_msg(data) } else if Jwt::is_jwt(data) { + c_zemu_log_stack("Tag::Jwt\x00"); self.tag = Tag::Jwt; self.obj.read_jwt(data) } else if StructuredMsg::is_msg(data) { + c_zemu_log_stack("Tag::StructuredMsg\x00"); self.tag = Tag::StructuredMsg; self.obj.read_structured_msg(data) } else { + c_zemu_log_stack("Tag::Transaction\x00"); self.tag = Tag::Transaction; self.obj.read_tx(data) } @@ -99,6 +106,7 @@ impl<'a> ParsedObj<'a> { value: &mut [u8], page_idx: u8, ) -> Result { + c_zemu_log_stack("ParsedObj::get_item\x00"); unsafe { match self.tag { Tag::Transaction => { @@ -259,6 +267,38 @@ impl<'a> Obj<'a> { } } +#[cfg(test)] +impl<'a> core::fmt::Debug for ParsedObj<'a> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut debug_struct = f.debug_struct("ParsedObj"); + debug_struct.field("tag", &self.tag); + + // Safety: We're matching on the tag to ensure we access the correct + // union variant. The union is guaranteed to be initialized with the + // correct variant and that variant won't change during the lifetime + // of the object. + match self.tag { + Tag::Transaction => unsafe { + debug_struct.field("obj", &self.obj.tx); + }, + Tag::Message => unsafe { + debug_struct.field("obj", &self.obj.msg); + }, + Tag::Jwt => unsafe { + debug_struct.field("obj", &self.obj.jwt); + }, + Tag::StructuredMsg => unsafe { + debug_struct.field("obj", &self.obj.structured_msg); + }, + Tag::Invalid => { + debug_struct.field("obj", &""); + } + } + + debug_struct.finish() + } +} + #[cfg(test)] mod test { use serde::{Deserialize, Serialize}; @@ -793,4 +833,17 @@ mod test { msg.read(&bytes).unwrap(); ParsedObj::validate(&mut msg).unwrap(); } + + #[test] + fn test_swap_tx() { + let input = "000000000104009ef3889fd070159edcd8ef88a0ec87cea1592c83000000000000000000000000000f42400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000302000000060002169ef3889fd070159edcd8ef88a0ec87cea1592c830100000000000027100003167c5f674a8fd08efa61dd9b11121e046dd2c892730a756e6976322d636f72650300000000000000000103167c5f674a8fd08efa61dd9b11121e046dd2c892730a756e6976322d636f7265168c5e2f8d25627d6edebeb6d10fa3300f5acc8441086c6f6e67636f696e086c6f6e67636f696e0300000000000000000103167c5f674a8fd08efa61dd9b11121e046dd2c892730a756e6976322d636f7265168c5e2f8d25627d6edebeb6d10fa3300f5acc8441086c6f6e67636f696e086c6f6e67636f696e0300000000000000000102169ef3889fd070159edcd8ef88a0ec87cea1592c83168c5e2f8d25627d6edebeb6d10fa3300f5acc8441086c6f6e67636f696e086c6f6e67636f696e030000000000000000010316402da2c079e5d31d58b9cfc7286d1b1eb2f7834e0f616d6d2d7661756c742d76322d303116402da2c079e5d31d58b9cfc7286d1b1eb2f7834e0a746f6b656e2d616c657804616c65780300000000011c908a02162ec1a2dc2904ebc8b408598116c75e42c51afa2617726f757465722d76656c61722d616c65782d762d312d320d737761702d68656c7065722d6100000007010000000000000000000000000000271001000000000000000000000000011c908a040c00000002016106167c5f674a8fd08efa61dd9b11121e046dd2c892730477737478016206168c5e2f8d25627d6edebeb6d10fa3300f5acc8441086c6f6e67636f696e06167c5f674a8fd08efa61dd9b11121e046dd2c8927312756e6976322d73686172652d6665652d746f0c0000000201610616402da2c079e5d31d58b9cfc7286d1b1eb2f7834e0b746f6b656e2d776c6f6e6701620616402da2c079e5d31d58b9cfc7286d1b1eb2f7834e0a746f6b656e2d616c65780c0000000101610100000000000000000000000005f5e100"; + let bytes = hex::decode(input).unwrap(); + let mut msg = ParsedObj::from_bytes(&bytes).unwrap(); + + msg.read(&bytes).unwrap(); + + ParsedObj::validate(&mut msg).unwrap(); + + std::println!("tx: {:?}", msg); + } } diff --git a/app/rust/src/parser/parser_common.rs b/app/rust/src/parser/parser_common.rs index 05b42dbe..a161d6ea 100644 --- a/app/rust/src/parser/parser_common.rs +++ b/app/rust/src/parser/parser_common.rs @@ -20,11 +20,12 @@ pub const C32_ENCODED_ADDRS_LENGTH: usize = 48; pub const NUM_SUPPORTED_POST_CONDITIONS: usize = 16; pub const SIGNATURE_LEN: usize = 65; pub const PUBKEY_LEN: usize = 33; -pub const TOKEN_TRANSFER_MEMO_LEN: usize = 34; +pub const MEMO_LEN: usize = 34; +pub const AMOUNT_LEN: usize = 8; // A recursion limit use to control ram usage when parsing // contract-call arguments that comes in a transaction -pub const TX_DEPTH_LIMIT: u8 = 3; +pub const TX_DEPTH_LIMIT: u8 = 8; // Use to limit recursion when parsing nested clarity values that comes as part of a structured // message. the limit is higher than the one use when parsing contract-args in transactions diff --git a/app/rust/src/parser/post_condition.rs b/app/rust/src/parser/post_conditions.rs similarity index 74% rename from app/rust/src/parser/post_condition.rs rename to app/rust/src/parser/post_conditions.rs index 834ddf9c..2f108237 100644 --- a/app/rust/src/parser/post_condition.rs +++ b/app/rust/src/parser/post_conditions.rs @@ -5,186 +5,20 @@ use nom::{ number::complete::{be_u64, le_u8}, }; -use super::error::ParserError; - -use super::parser_common::{ - AssetInfo, ContractName, StacksAddress, C32_ENCODED_ADDRS_LENGTH, HASH160_LEN, STX_DECIMALS, - TX_DEPTH_LIMIT, -}; -use crate::parser::value::Value; -use crate::zxformat; - -#[repr(u8)] -#[derive(Clone, PartialEq, Copy)] -pub enum PostConditionPrincipalId { - Origin = 0x01, - Standard = 0x02, - Contract = 0x03, -} - -impl TryFrom for PostConditionPrincipalId { - type Error = ParserError; - - fn try_from(value: u8) -> Result { - let id = match value { - 1 => Self::Origin, - 2 => Self::Standard, - 3 => Self::Contract, - _ => return Err(ParserError::UnexpectedValue), - }; - Ok(id) - } -} - -#[repr(C)] -#[derive(Clone, Copy, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub enum PostConditionPrincipal<'a> { - Origin, - Standard(StacksAddress<'a>), - Contract(StacksAddress<'a>, ContractName<'a>), -} - -impl<'a> PostConditionPrincipal<'a> { - #[inline(never)] - pub fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { - let id = le_u8(bytes)?; - let principal_id = PostConditionPrincipalId::try_from(id.1)?; - match principal_id { - PostConditionPrincipalId::Origin => Ok((id.0, PostConditionPrincipal::Origin)), - PostConditionPrincipalId::Standard => { - let addrs = StacksAddress::from_bytes(id.0)?; - Ok((addrs.0, PostConditionPrincipal::Standard(addrs.1))) - } - PostConditionPrincipalId::Contract => { - let addrs = StacksAddress::from_bytes(id.0)?; - let contract_name = ContractName::from_bytes(addrs.0)?; - Ok(( - contract_name.0, - PostConditionPrincipal::Contract(addrs.1, contract_name.1), - )) - } - } - } - - pub fn read_as_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], &[u8], ParserError> { - let (rem, id) = le_u8(bytes)?; - let principal_id = PostConditionPrincipalId::try_from(id)?; - match principal_id { - PostConditionPrincipalId::Origin => Ok((rem, Default::default())), - PostConditionPrincipalId::Standard => { - // we take 20-byte key hash + 1-byte hash_mode + 1-byte principal_id - let (raw, addr) = take(HASH160_LEN + 2usize)(bytes)?; - Ok((raw, addr)) - } - PostConditionPrincipalId::Contract => { - let (rem, _) = StacksAddress::from_bytes(rem)?; - let (_, name) = ContractName::from_bytes(rem)?; - // we take 20-byte key hash + 1-byte hash_mode + - // contract_name len + 1-byte len + 1-byte principal_id - let total_len = HASH160_LEN + name.len() + 3; - let (rem, contract_bytes) = take(total_len)(bytes)?; - Ok((rem, contract_bytes)) - } - } - } - - pub fn is_origin(&self) -> bool { - matches!(self, Self::Origin) - } - - pub fn is_standard(&self) -> bool { - matches!(self, Self::Standard(..)) - } - - pub fn is_contract(&self) -> bool { - matches!(self, Self::Contract(..)) - } - - pub fn origin_address( - ) -> Result, ParserError> { - let mut output: ArrayVec<[_; C32_ENCODED_ADDRS_LENGTH]> = ArrayVec::new(); - output.try_extend_from_slice(b"Origin".as_ref()).unwrap(); - Ok(output) - } - - pub fn get_principal_address( - &self, - ) -> Result, ParserError> { - match self { - Self::Origin => Self::origin_address(), - Self::Standard(ref address) | Self::Contract(ref address, _) => { - address.encoded_address() - } - } - } +mod fungible; +mod non_fungible; +mod post_condition_principal; +pub use fungible::FungibleConditionCode; +pub use non_fungible::NonfungibleConditionCode; - pub fn get_contract_name(&'a self) -> Option<&'a [u8]> { - match self { - Self::Contract(_, name) => Some(name.name()), - _ => None, - } - } -} +pub use post_condition_principal::{PostConditionPrincipal, PostConditionPrincipalId}; -#[repr(u8)] -#[derive(Clone, PartialEq, Copy)] -#[cfg_attr(test, derive(Debug))] -pub enum FungibleConditionCode { - SentEq = 0x01, - SentGt = 0x02, - SentGe = 0x03, - SentLt = 0x04, - SentLe = 0x05, -} - -impl FungibleConditionCode { - pub fn from_u8(b: u8) -> Option { - match b { - 0x01 => Some(FungibleConditionCode::SentEq), - 0x02 => Some(FungibleConditionCode::SentGt), - 0x03 => Some(FungibleConditionCode::SentGe), - 0x04 => Some(FungibleConditionCode::SentLt), - 0x05 => Some(FungibleConditionCode::SentLe), - _ => None, - } - } - - pub fn to_str(self) -> &'static str { - match self { - FungibleConditionCode::SentEq => "SentEq", - FungibleConditionCode::SentGt => "SentGt", - FungibleConditionCode::SentGe => "SentGe", - FungibleConditionCode::SentLt => "SentLt", - FungibleConditionCode::SentLe => "SentLe", - } - } -} - -#[repr(u8)] -#[derive(Clone, PartialEq, Copy)] -#[cfg_attr(test, derive(Debug))] -pub enum NonfungibleConditionCode { - Sent = 0x10, - NotSent = 0x11, -} - -impl NonfungibleConditionCode { - pub fn from_u8(b: u8) -> Option { - match b { - 0x10 => Some(NonfungibleConditionCode::Sent), - 0x11 => Some(NonfungibleConditionCode::NotSent), - _ => None, - } - } +use super::error::ParserError; - pub fn to_str(self) -> &'static str { - match self { - Self::Sent => "Sent", - Self::NotSent => "NotSent", - } - } -} +use super::parser_common::{AssetInfo, C32_ENCODED_ADDRS_LENGTH, STX_DECIMALS, TX_DEPTH_LIMIT}; +use crate::zxformat; +use crate::{bolos::c_zemu_log_stack, parser::value::Value}; +use lexical_core::Number; #[repr(u8)] #[derive(Clone, PartialEq, Copy)] @@ -345,18 +179,18 @@ impl<'a> TransactionPostCondition<'a> { let mut output = ArrayVec::from([0u8; zxformat::MAX_STR_BUFF_LEN]); let amount = self.tokens_amount()?; - let len = zxformat::u64_to_str(output.as_mut(), amount).ok()? as usize; + let len = zxformat::u64_to_str(output.as_mut(), amount).ok()?.len(); unsafe { output.set_len(len); } Some(output) } - pub fn amount_stx_str(&self) -> Option> { + pub fn amount_stx_str(&self) -> Option> { let amount = self.amount_stx()?; - let mut output = ArrayVec::from([0u8; zxformat::MAX_STR_BUFF_LEN]); - let len = - zxformat::fpu64_to_str_check_test(output.as_mut(), amount, STX_DECIMALS).ok()? as usize; + + let mut output = ArrayVec::from([0u8; u64::FORMATTED_SIZE_DECIMAL]); + let len = zxformat::fpu64_to_str(output.as_mut(), amount, STX_DECIMALS).ok()? as usize; unsafe { output.set_len(len); } @@ -423,6 +257,7 @@ impl<'a> TransactionPostCondition<'a> { page_idx: u8, ) -> Result { let index = display_idx % self.num_items(); + if index == 0 { self.write_principal_address(out_key, out_value, page_idx) } else { @@ -443,6 +278,8 @@ impl<'a> TransactionPostCondition<'a> { out_value: &mut [u8], page_idx: u8, ) -> Result { + c_zemu_log_stack("TransactionPostCondition::get_stx_items\x00"); + let mut writer_key = zxformat::Writer::new(out_key); match self { Self::Stx(..) => match display_idx { @@ -477,6 +314,8 @@ impl<'a> TransactionPostCondition<'a> { out_value: &mut [u8], page_idx: u8, ) -> Result { + c_zemu_log_stack("TransactionPostCondition::get_fungible_items\x00"); + let mut writer_key = zxformat::Writer::new(out_key); match self { Self::Fungible(..) => { @@ -526,6 +365,8 @@ impl<'a> TransactionPostCondition<'a> { out_value: &mut [u8], page_idx: u8, ) -> Result { + c_zemu_log_stack("TransactionPostCondition::get_non_fungible_items\x00"); + let mut writer_key = zxformat::Writer::new(out_key); match self { Self::Nonfungible(..) => { @@ -566,6 +407,8 @@ impl<'a> TransactionPostCondition<'a> { #[cfg(test)] mod test { + use crate::parser::StacksAddress; + use super::*; use std::prelude::v1::*; diff --git a/app/rust/src/parser/post_conditions/fungible.rs b/app/rust/src/parser/post_conditions/fungible.rs new file mode 100644 index 00000000..608f8b66 --- /dev/null +++ b/app/rust/src/parser/post_conditions/fungible.rs @@ -0,0 +1,33 @@ +#[repr(u8)] +#[derive(Clone, PartialEq, Copy)] +#[cfg_attr(test, derive(Debug))] +pub enum FungibleConditionCode { + SentEq = 0x01, + SentGt = 0x02, + SentGe = 0x03, + SentLt = 0x04, + SentLe = 0x05, +} + +impl FungibleConditionCode { + pub fn from_u8(b: u8) -> Option { + match b { + 0x01 => Some(FungibleConditionCode::SentEq), + 0x02 => Some(FungibleConditionCode::SentGt), + 0x03 => Some(FungibleConditionCode::SentGe), + 0x04 => Some(FungibleConditionCode::SentLt), + 0x05 => Some(FungibleConditionCode::SentLe), + _ => None, + } + } + + pub fn to_str(self) -> &'static str { + match self { + FungibleConditionCode::SentEq => "SentEq", + FungibleConditionCode::SentGt => "SentGt", + FungibleConditionCode::SentGe => "SentGe", + FungibleConditionCode::SentLt => "SentLt", + FungibleConditionCode::SentLe => "SentLe", + } + } +} diff --git a/app/rust/src/parser/post_conditions/non_fungible.rs b/app/rust/src/parser/post_conditions/non_fungible.rs new file mode 100644 index 00000000..ad1e8368 --- /dev/null +++ b/app/rust/src/parser/post_conditions/non_fungible.rs @@ -0,0 +1,24 @@ +#[repr(u8)] +#[derive(Clone, PartialEq, Copy)] +#[cfg_attr(test, derive(Debug))] +pub enum NonfungibleConditionCode { + Sent = 0x10, + NotSent = 0x11, +} + +impl NonfungibleConditionCode { + pub fn from_u8(b: u8) -> Option { + match b { + 0x10 => Some(NonfungibleConditionCode::Sent), + 0x11 => Some(NonfungibleConditionCode::NotSent), + _ => None, + } + } + + pub fn to_str(self) -> &'static str { + match self { + Self::Sent => "Sent", + Self::NotSent => "NotSent", + } + } +} diff --git a/app/rust/src/parser/post_conditions/post_condition_principal.rs b/app/rust/src/parser/post_conditions/post_condition_principal.rs new file mode 100644 index 00000000..a0c01797 --- /dev/null +++ b/app/rust/src/parser/post_conditions/post_condition_principal.rs @@ -0,0 +1,121 @@ +use core::convert::TryFrom; + +use arrayvec::ArrayVec; +use nom::{bytes::complete::take, number::complete::le_u8}; + +use crate::parser::{ + ContractName, ParserError, StacksAddress, C32_ENCODED_ADDRS_LENGTH, HASH160_LEN, +}; + +#[repr(u8)] +#[derive(Clone, PartialEq, Copy)] +pub enum PostConditionPrincipalId { + Origin = 0x01, + Standard = 0x02, + Contract = 0x03, +} + +impl TryFrom for PostConditionPrincipalId { + type Error = ParserError; + + fn try_from(value: u8) -> Result { + let id = match value { + 1 => Self::Origin, + 2 => Self::Standard, + 3 => Self::Contract, + _ => return Err(ParserError::UnexpectedValue), + }; + Ok(id) + } +} + +#[repr(C)] +#[derive(Clone, Copy, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub enum PostConditionPrincipal<'a> { + Origin, + Standard(StacksAddress<'a>), + Contract(StacksAddress<'a>, ContractName<'a>), +} + +impl<'a> PostConditionPrincipal<'a> { + #[inline(never)] + pub fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { + let id = le_u8(bytes)?; + let principal_id = PostConditionPrincipalId::try_from(id.1)?; + match principal_id { + PostConditionPrincipalId::Origin => Ok((id.0, PostConditionPrincipal::Origin)), + PostConditionPrincipalId::Standard => { + let addrs = StacksAddress::from_bytes(id.0)?; + Ok((addrs.0, PostConditionPrincipal::Standard(addrs.1))) + } + PostConditionPrincipalId::Contract => { + let addrs = StacksAddress::from_bytes(id.0)?; + let contract_name = ContractName::from_bytes(addrs.0)?; + Ok(( + contract_name.0, + PostConditionPrincipal::Contract(addrs.1, contract_name.1), + )) + } + } + } + + pub fn read_as_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], &[u8], ParserError> { + let (rem, id) = le_u8(bytes)?; + let principal_id = PostConditionPrincipalId::try_from(id)?; + match principal_id { + PostConditionPrincipalId::Origin => Ok((rem, Default::default())), + PostConditionPrincipalId::Standard => { + // we take 20-byte key hash + 1-byte hash_mode + 1-byte principal_id + let (raw, addr) = take(HASH160_LEN + 2usize)(bytes)?; + Ok((raw, addr)) + } + PostConditionPrincipalId::Contract => { + let (rem, _) = StacksAddress::from_bytes(rem)?; + let (_, name) = ContractName::from_bytes(rem)?; + // we take 20-byte key hash + 1-byte hash_mode + + // contract_name len + 1-byte len + 1-byte principal_id + let total_len = HASH160_LEN + name.len() + 3; + let (rem, contract_bytes) = take(total_len)(bytes)?; + Ok((rem, contract_bytes)) + } + } + } + + pub fn is_origin(&self) -> bool { + matches!(self, Self::Origin) + } + + pub fn is_standard(&self) -> bool { + matches!(self, Self::Standard(..)) + } + + pub fn is_contract(&self) -> bool { + matches!(self, Self::Contract(..)) + } + + pub fn origin_address( + ) -> Result, ParserError> { + let mut output: ArrayVec<[_; C32_ENCODED_ADDRS_LENGTH]> = ArrayVec::new(); + output.try_extend_from_slice(b"Origin".as_ref()).unwrap(); + Ok(output) + } + + pub fn get_principal_address( + &self, + ) -> Result, ParserError> { + match self { + Self::Origin => Self::origin_address(), + Self::Standard(ref address) | Self::Contract(ref address, _) => { + address.encoded_address() + } + } + } + + pub fn get_contract_name(&'a self) -> Option<&'a [u8]> { + match self { + Self::Contract(_, name) => Some(name.name()), + _ => None, + } + } +} diff --git a/app/rust/src/parser/spending_condition.rs b/app/rust/src/parser/spending_condition.rs index 341b19cf..93e9b887 100644 --- a/app/rust/src/parser/spending_condition.rs +++ b/app/rust/src/parser/spending_condition.rs @@ -163,7 +163,7 @@ impl<'a> SpendingConditionSigner<'a> { pub fn nonce_str(&self) -> Result, ParserError> { let mut output = ArrayVec::from([0u8; zxformat::MAX_STR_BUFF_LEN]); let nonce = self.nonce()?; - let len = zxformat::u64_to_str(&mut output[..zxformat::MAX_STR_BUFF_LEN], nonce)? as usize; + let len = zxformat::u64_to_str(&mut output[..zxformat::MAX_STR_BUFF_LEN], nonce)?.len(); unsafe { output.set_len(len); } @@ -174,7 +174,7 @@ impl<'a> SpendingConditionSigner<'a> { pub fn fee_str(&self) -> Result, ParserError> { let mut output = ArrayVec::from([0u8; zxformat::MAX_STR_BUFF_LEN]); let fee = self.fee()?; - let len = zxformat::u64_to_str(output.as_mut(), fee)? as usize; + let len = zxformat::u64_to_str(output.as_mut(), fee)?.len(); unsafe { output.set_len(len); } @@ -404,6 +404,7 @@ impl<'a> MultisigSpendingCondition<'a> { fn clear_as_singlesig(&mut self) { // TODO: check if it involves shrinking // the general transaction buffer + // function is not being called anywhere todo!(); } } diff --git a/app/rust/src/parser/structured_msg.rs b/app/rust/src/parser/structured_msg.rs index b5812a9f..9a8601db 100644 --- a/app/rust/src/parser/structured_msg.rs +++ b/app/rust/src/parser/structured_msg.rs @@ -82,13 +82,12 @@ impl<'a> Domain<'a> { let id = value.value_id(); if id == ValueId::UInt { - // wont panic as this was checked by the parser - let chain_id = value.uint().unwrap(); + let chain_id = value.uint().ok_or(ParserError::UnexpectedValue)?; let num = chain_id.numtoa_str(10, &mut buff).as_bytes(); pageString(out_value, num, page_idx) } else { - let string = value.string_ascii().unwrap(); + let string = value.string_ascii().ok_or(ParserError::UnexpectedValue)?; pageString(out_value, string.content(), page_idx) } diff --git a/app/rust/src/parser/transaction.rs b/app/rust/src/parser/transaction.rs index f95a819d..2867d710 100644 --- a/app/rust/src/parser/transaction.rs +++ b/app/rust/src/parser/transaction.rs @@ -2,25 +2,23 @@ use core::fmt::Write; use nom::{ branch::permutation, bytes::complete::take, - combinator::iterator, number::complete::{be_u32, le_u8}, }; -use arrayvec::ArrayVec; - -use crate::parser::{ - error::ParserError, - parser_common::{ - HashMode, SignerId, TransactionVersion, C32_ENCODED_ADDRS_LENGTH, - NUM_SUPPORTED_POST_CONDITIONS, +use crate::{ + bolos::c_zemu_log_stack, + parser::{ + error::ParserError, + parser_common::{HashMode, SignerId, TransactionVersion, C32_ENCODED_ADDRS_LENGTH}, + transaction_auth::TransactionAuth, + transaction_payload::TransactionPayload, }, - post_condition::TransactionPostCondition, - transaction_auth::TransactionAuth, - transaction_payload::TransactionPayload, }; use crate::{check_canary, zxformat}; +use super::PostConditions; + // In multisig transactions the remainder should contain: // 32-byte previous signer post_sig_hash // 1-byte pubkey type @@ -35,33 +33,6 @@ pub enum TransactionAuthFlags { Sponsored = 0x05, } -#[repr(u8)] -#[derive(Clone, PartialEq, Copy)] -#[cfg_attr(test, derive(Debug))] -pub enum TransactionPostConditionMode { - Allow = 0x01, // allow any other changes not specified - Deny = 0x02, // deny any other changes not specified -} - -impl TransactionPostConditionMode { - #[inline(never)] - fn from_u8(v: u8) -> Option { - match v { - 1 => Some(Self::Allow), - 2 => Some(Self::Deny), - _ => None, - } - } - - #[inline(never)] - fn from_bytes(bytes: &[u8]) -> nom::IResult<&[u8], Self, ParserError> { - let mode = le_u8(bytes)?; - let tx_mode = Self::from_u8(mode.1).ok_or(ParserError::UnexpectedError)?; - check_canary!(); - Ok((mode.0, tx_mode)) - } -} - #[repr(u8)] #[derive(Clone, PartialEq, Copy)] #[cfg_attr(test, derive(Debug))] @@ -91,123 +62,6 @@ impl TransactionAnchorMode { } } -#[repr(C)] -#[derive(Clone, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub struct PostConditions<'a> { - pub(crate) conditions: ArrayVec<[&'a [u8]; NUM_SUPPORTED_POST_CONDITIONS]>, - num_items: u8, - current_idx: u8, -} - -impl<'a> PostConditions<'a> { - #[inline(never)] - fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { - let (raw, len) = be_u32::<_, ParserError>(bytes)?; - if len > NUM_SUPPORTED_POST_CONDITIONS as u32 { - return Err(nom::Err::Error(ParserError::ValueOutOfRange)); - } - let mut conditions: ArrayVec<[&'a [u8]; NUM_SUPPORTED_POST_CONDITIONS]> = ArrayVec::new(); - let mut iter = iterator(raw, TransactionPostCondition::read_as_bytes); - iter.take(len as _).enumerate().for_each(|i| { - conditions.push(i.1); - }); - let res = iter.finish()?; - let num_items = Self::get_num_items(conditions.as_ref()); - check_canary!(); - Ok(( - res.0, - Self { - conditions, - num_items, - current_idx: 0, - }, - )) - } - - fn get_num_items(conditions: &[&[u8]]) -> u8 { - conditions - .iter() - .filter_map(|bytes| TransactionPostCondition::from_bytes(bytes).ok()) - .map(|condition| (condition.1).num_items()) - .sum() - } - - pub fn get_postconditions(&self) -> &[&[u8]] { - self.conditions.as_ref() - } - - pub fn num_items(&self) -> u8 { - self.num_items - } - - #[inline(never)] - fn update_postcondition( - &mut self, - total_items: u8, - display_idx: u8, - ) -> Result { - // map display_idx to our range of items - let in_start = total_items - self.num_items; - let idx = self.map_idx(display_idx, in_start, total_items); - - let limit = self.get_current_limit(); - - // get the current postcondition which is used to - // check if it is time to change to the next/previous postconditions in our list - // and if that is not the case, we use it to get its items - let current_condition = self.current_post_condition()?; - - // before continuing we need to check if the current display_idx - // correspond to the current, next or previous postcondition - // if so, update it - if idx >= (limit + current_condition.num_items()) { - self.current_idx += 1; - // this should not happen - if self.current_idx > self.num_items { - return Err(ParserError::UnexpectedError); - } - } else if idx < limit && idx > 0 { - self.current_idx -= 1; - } - Ok(idx) - } - - #[inline(never)] - pub fn get_items( - &mut self, - display_idx: u8, - out_key: &mut [u8], - out_value: &mut [u8], - page_idx: u8, - num_items: u8, - ) -> Result { - let idx = self.update_postcondition(num_items, display_idx)?; - let current_postcondition = self.current_post_condition()?; - current_postcondition.get_items(idx, out_key, out_value, page_idx) - } - - fn map_idx(&self, display_idx: u8, in_start: u8, in_end: u8) -> u8 { - let slope = self.num_items / (in_end - in_start); - slope * (display_idx - in_start) - } - - fn get_current_limit(&self) -> u8 { - let current = self.current_idx as usize; - self.conditions[..current] - .iter() - .filter_map(|bytes| TransactionPostCondition::from_bytes(bytes).ok()) - .map(|condition| (condition.1).num_items()) - .sum() - } - - fn current_post_condition(&self) -> Result { - TransactionPostCondition::from_bytes(self.conditions[self.current_idx as usize]) - .map_err(|_| ParserError::PostConditionFailed) - .map(|res| res.1) - } -} - pub type TxTuple<'a> = ( TransactionVersion, // version number u32, // chainId @@ -219,6 +73,11 @@ pub type TxTuple<'a> = ( impl<'a> From<(&'a [u8], TxTuple<'a>)> for Transaction<'a> { fn from(raw: (&'a [u8], TxTuple<'a>)) -> Self { + let mut remainder = None; + if !raw.0.is_empty() { + remainder = Some(raw.0); + } + Self { version: (raw.1).0, chain_id: (raw.1).1, @@ -228,7 +87,7 @@ impl<'a> From<(&'a [u8], TxTuple<'a>)> for Transaction<'a> { payload: (raw.1).5, // At this point the signer is unknown signer: SignerId::Invalid, - remainder: raw.0, + remainder, } } } @@ -249,94 +108,106 @@ pub struct Transaction<'a> { // with them, we can construct the pre_sig_hash for the current signer // we would ideally verify it, but we can lend such responsability to the application // which has more resources - // If this is not a multisig transaction, this field should be an empty array - pub remainder: &'a [u8], + // If this is not a multisig transaction, this field should be None + pub remainder: Option<&'a [u8]>, } impl<'a> Transaction<'a> { fn update_remainder(&mut self, data: &'a [u8]) { - self.remainder = data; + if !data.is_empty() { + self.remainder = Some(data); + } else { + self.remainder = None; + } } #[inline(never)] pub fn read(&mut self, data: &'a [u8]) -> Result<(), ParserError> { - self.update_remainder(data); - self.read_header()?; - self.read_auth()?; - self.read_transaction_modes()?; - self.read_post_conditions()?; - self.read_payload()?; + c_zemu_log_stack("Transaction::read\x00"); + let rem = self.read_header(data)?; + let rem = self.read_auth(rem)?; + let rem = self.read_transaction_modes(rem)?; + let rem = self.read_post_conditions(rem)?; + let rem = self.read_payload(rem)?; let is_token_transfer = self.payload.is_token_transfer_payload(); let is_standard_auth = self.transaction_auth.is_standard_auth(); if is_token_transfer && !is_standard_auth { + c_zemu_log_stack("Transaction::invalid_token_transfer!\x00"); return Err(ParserError::InvalidTransactionPayload); } // At this point we do not know who the signer is self.signer = SignerId::Invalid; + + self.remainder = None; + + // set the remainder if this is mutltisig + if self.is_multisig() && !rem.is_empty() { + self.update_remainder(rem); + } + Ok(()) } #[inline(never)] - fn read_header(&mut self) -> Result<(), ParserError> { - let (next_data, version) = TransactionVersion::from_bytes(self.remainder) - .map_err(|_| ParserError::UnexpectedValue)?; + fn read_header(&mut self, data: &'a [u8]) -> Result<&'a [u8], ParserError> { + c_zemu_log_stack("Transaction::read_header\x00"); + let (rem, version) = + TransactionVersion::from_bytes(data).map_err(|_| ParserError::UnexpectedValue)?; - let (next_data, chain_id) = - be_u32::<_, ParserError>(next_data).map_err(|_| ParserError::UnexpectedValue)?; + let (rem, chain_id) = + be_u32::<_, ParserError>(rem).map_err(|_| ParserError::UnexpectedValue)?; self.version = version; self.chain_id = chain_id; check_canary!(); - self.update_remainder(next_data); - - Ok(()) + Ok(rem) } #[inline(never)] - fn read_auth(&mut self) -> Result<(), ParserError> { - let (next_data, auth) = TransactionAuth::from_bytes(self.remainder) - .map_err(|_| ParserError::InvalidAuthType)?; + fn read_auth(&mut self, data: &'a [u8]) -> Result<&'a [u8], ParserError> { + c_zemu_log_stack("Transaction::read_auth\x00"); + let (rem, auth) = + TransactionAuth::from_bytes(data).map_err(|_| ParserError::InvalidAuthType)?; self.transaction_auth = auth; - self.update_remainder(next_data); check_canary!(); - Ok(()) + Ok(rem) } #[inline(never)] - fn read_transaction_modes(&mut self) -> Result<(), ParserError> { + fn read_transaction_modes(&mut self, data: &'a [u8]) -> Result<&'a [u8], ParserError> { + c_zemu_log_stack("Transaction::read_transaction_modes\x00"); // two modes are included here, // anchor mode and postcondition mode - let (raw, _) = take::<_, _, ParserError>(2usize)(self.remainder) + let (rem, _) = take::<_, _, ParserError>(2usize)(data) .map_err(|_| ParserError::UnexpectedBufferEnd)?; - let modes = arrayref::array_ref!(self.remainder, 0, 2); + let modes = arrayref::array_ref!(data, 0, 2); self.transaction_modes = modes; - self.update_remainder(raw); check_canary!(); - Ok(()) + Ok(rem) } #[inline(never)] - fn read_post_conditions(&mut self) -> Result<(), ParserError> { - let (raw, conditions) = PostConditions::from_bytes(self.remainder) - .map_err(|_| ParserError::PostConditionFailed)?; + fn read_post_conditions(&mut self, data: &'a [u8]) -> Result<&'a [u8], ParserError> { + c_zemu_log_stack("Transaction::read_post_conditions\x00"); + let (rem, conditions) = + PostConditions::from_bytes(data).map_err(|_| ParserError::PostConditionFailed)?; self.post_conditions = conditions; - self.update_remainder(raw); check_canary!(); - Ok(()) + Ok(rem) } #[inline(never)] - fn read_payload(&mut self) -> Result<(), ParserError> { - let (raw, payload) = TransactionPayload::from_bytes(self.remainder) + fn read_payload(&mut self, data: &'a [u8]) -> Result<&'a [u8], ParserError> { + c_zemu_log_stack("Transaction::read_payload\x00"); + let (rem, payload) = TransactionPayload::from_bytes(data) .map_err(|_| ParserError::InvalidTransactionPayload)?; self.payload = payload; - self.update_remainder(raw); check_canary!(); - Ok(()) + Ok(rem) } pub fn from_bytes(bytes: &'a [u8]) -> Result { @@ -368,9 +239,11 @@ impl<'a> Transaction<'a> { } pub fn num_items(&self) -> Result { + let num_items_post_conditions = self.post_conditions.num_items(); + // nonce + origin + fee-rate + payload + post-conditions 3u8.checked_add(self.payload.num_items()) - .and_then(|res| res.checked_add(self.post_conditions.num_items)) + .and_then(|res| res.checked_add(num_items_post_conditions)) .ok_or(ParserError::ValueOutOfRange) } @@ -381,6 +254,7 @@ impl<'a> Transaction<'a> { out_value: &mut [u8], page_idx: u8, ) -> Result { + c_zemu_log_stack("Transaction::get_origin_items\x00"); let mut writer_key = zxformat::Writer::new(out_key); #[cfg(test)] @@ -434,8 +308,9 @@ impl<'a> Transaction<'a> { out_value: &mut [u8], page_idx: u8, ) -> Result { + c_zemu_log_stack("Transaction::get_other_items\x00"); let num_items = self.num_items()?; - let post_conditions_items = self.post_conditions.num_items; + let post_conditions_items = self.post_conditions.num_items(); if display_idx >= (num_items - post_conditions_items) { if post_conditions_items == 0 { @@ -461,6 +336,7 @@ impl<'a> Transaction<'a> { out_value: &mut [u8], page_idx: u8, ) -> Result { + c_zemu_log_stack("Transaction::get_item\x00"); if display_idx >= self.num_items()? { return Err(ParserError::DisplayIdxOutOfRange); } @@ -527,21 +403,50 @@ impl<'a> Transaction<'a> { if self.signer != SignerId::Invalid { return ParserError::ParserOk; } + c_zemu_log_stack("Invalid transaction signer\x00"); ParserError::InvalidAuthType } // returns a slice of the last block to be used in the presighash calculation pub fn last_transaction_block(&self) -> &[u8] { - unsafe { - let len = - (self.remainder.as_ptr() as usize - self.transaction_modes.as_ptr() as usize) as _; - core::slice::from_raw_parts(self.transaction_modes.as_ptr(), len) + match self.remainder { + Some(remainder) => { + let remainder_ptr = remainder.as_ptr() as usize; + let tx_modes_ptr = self.transaction_modes.as_ptr() as usize; + + unsafe { + let len = remainder_ptr - tx_modes_ptr; + core::slice::from_raw_parts(self.transaction_modes.as_ptr(), len) + } + } + None => { + // If there's no remainder, return everything from transaction_modes to the end of payload + let payload = self.payload.raw_payload(); + unsafe { + let payload_end = payload.as_ptr().add(payload.len()); + let len = payload_end as usize - self.transaction_modes.as_ptr() as usize; + core::slice::from_raw_parts(self.transaction_modes.as_ptr(), len) + } + } } } + // pub fn last_transaction_block(&self) -> Option<&[u8]> { + // self.remainder.map(|remainder| { + // let remainder_ptr = remainder.as_ptr() as usize; + // let tx_modes_ptr = self.transaction_modes.as_ptr() as usize; + // + // unsafe { + // let len = remainder_ptr - tx_modes_ptr; + // core::slice::from_raw_parts(self.transaction_modes.as_ptr(), len) + // } + // }) + // } pub fn previous_signer_data(&self) -> Option<&[u8]> { - if self.is_multisig() && self.remainder.len() >= MULTISIG_PREVIOUS_SIGNER_DATA_LEN { - return Some(&self.remainder[..MULTISIG_PREVIOUS_SIGNER_DATA_LEN]); + let remainder = self.remainder?; + + if self.is_multisig() && remainder.len() >= MULTISIG_PREVIOUS_SIGNER_DATA_LEN { + return Some(&remainder[..MULTISIG_PREVIOUS_SIGNER_DATA_LEN]); } None } diff --git a/app/rust/src/parser/transaction_payload.rs b/app/rust/src/parser/transaction_payload.rs index 3e85613a..15df6cfb 100644 --- a/app/rust/src/parser/transaction_payload.rs +++ b/app/rust/src/parser/transaction_payload.rs @@ -1,604 +1,21 @@ -use core::fmt::Write; -use nom::{ - branch::alt, - bytes::complete::{tag, take}, - combinator::{flat_map, map}, - number::complete::{be_u32, be_u64, be_u8, le_u8}, - sequence::tuple, +mod arguments; +mod contract_call; +mod smart_contract; +mod token_transfer; +mod versioned_contract; + +use nom::number::complete::le_u8; + +use self::{ + contract_call::{TransactionContractCall, CONTRACT_CALL_BASE_ITEMS}, + smart_contract::TransactionSmartContract, + token_transfer::StxTokenTransfer, + versioned_contract::VersionedSmartContract, }; -use arrayvec::ArrayVec; -use numtoa::NumToA; - -use super::{ - utils::ApduPanic, ClarityName, ContractName, PrincipalData, StacksAddress, - C32_ENCODED_ADDRS_LENGTH, HASH160_LEN, TX_DEPTH_LIMIT, -}; +use super::{ContractName, C32_ENCODED_ADDRS_LENGTH}; use crate::parser::error::ParserError; -use crate::parser::c32; - -use super::value::{Value, ValueId}; -use crate::{check_canary, is_expert_mode, zxformat}; - -// The number of contract call arguments we can handle. -// this can be adjusted, but keep in mind that higher values could -// hit stack overflows issues. -pub const MAX_NUM_ARGS: u32 = 10; - -// The items in contract_call transactions are -// contract_address, contract_name and function_name -pub const CONTRACT_CALL_BASE_ITEMS: u8 = 3; - -pub const MAX_STRING_ASCII_TO_SHOW: usize = 60; - -#[repr(u8)] -#[derive(Clone, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub enum TokenTranferPrincipal { - Standard = 0x05, - Contract = 0x06, -} - -impl TokenTranferPrincipal { - fn from_u8(v: u8) -> Result { - match v { - 5 => Ok(Self::Standard), - 6 => Ok(Self::Contract), - _ => Err(ParserError::InvalidTokenTransferPrincipal), - } - } -} - -#[repr(C)] -#[derive(Clone, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub struct StxTokenTransfer<'a>(&'a [u8]); - -impl<'a> StxTokenTransfer<'a> { - #[inline(never)] - fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { - let id = le_u8(bytes)?; - let (raw, _) = match TokenTranferPrincipal::from_u8(id.1)? { - TokenTranferPrincipal::Standard => PrincipalData::standard_from_bytes(id.0)?, - TokenTranferPrincipal::Contract => PrincipalData::contract_principal_from_bytes(id.0)?, - }; - // Besides principal we take 34-bytes being the MEMO message + 8-bytes amount of stx - let len = bytes.len() - raw.len() + 34 + 8; - let (raw, data) = take(len)(bytes)?; - Ok((raw, Self(data))) - } - - pub fn memo(&self) -> &[u8] { - let at = self.0.len() - 34; - // safe to unwrap as parser checked for proper len - self.0.get(at..).apdu_unwrap() - } - - pub fn amount(&self) -> Result { - let at = self.0.len() - 34 - 8; - let amount = self.0.get(at..).ok_or(ParserError::NoData)?; - be_u64::<_, ParserError>(amount) - .map(|res| res.1) - .map_err(|_| ParserError::UnexpectedBufferEnd) - } - - pub fn raw_address(&self) -> &[u8] { - // Skips the principal-id and hash_mode - // is valid as this was check by the parser - // safe to unwrap as this was checked at parsing - self.0.get(2..22).apdu_unwrap() - } - - pub fn encoded_address( - &self, - ) -> Result, ParserError> { - // Skips the principal-id at [0] and uses hash_mode and the follow 20-bytes - let version = self.0.get(1).ok_or(ParserError::NoData)?; - c32::c32_address( - *version, - self.0.get(2..22).ok_or(ParserError::InvalidAddress)?, - ) - } - - pub fn amount_stx(&self) -> Result, ParserError> { - let mut output = ArrayVec::from([0u8; zxformat::MAX_STR_BUFF_LEN]); - let amount = self.amount()?; - let len = zxformat::u64_to_str(output.as_mut(), amount)? as usize; - unsafe { - output.set_len(len); - } - check_canary!(); - Ok(output) - } - - fn get_token_transfer_items( - &self, - display_idx: u8, - out_key: &mut [u8], - out_value: &mut [u8], - page_idx: u8, - ) -> Result { - let mut writer_key = zxformat::Writer::new(out_key); - - match display_idx { - // Fomatting the amount in stx - 0 => { - writer_key - .write_str("Amount uSTX") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - let amount = self.amount_stx()?; - check_canary!(); - zxformat::pageString(out_value, amount.as_ref(), page_idx) - } - // Recipient address - 1 => { - writer_key - .write_str("To") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - let recipient = self.encoded_address()?; - check_canary!(); - zxformat::pageString(out_value, recipient.as_ref(), page_idx) - } - 2 => { - writer_key - .write_str("Memo") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - check_canary!(); - zxformat::pageString(out_value, self.memo(), page_idx) - } - _ => Err(ParserError::DisplayIdxOutOfRange), - } - } -} - -#[repr(C)] -#[derive(Clone, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub struct Arguments<'a>(&'a [u8]); - -impl<'a> Arguments<'a> { - #[inline(never)] - fn from_bytes(bytes: &'a [u8]) -> Result<(&[u8], Self), nom::Err> { - check_canary!(); - - let (_, num_args) = be_u32::<_, ParserError>(bytes)?; - - if num_args > MAX_NUM_ARGS && !is_expert_mode() { - return Err(ParserError::InvalidTransactionPayload.into()); - } - let (raw, args) = take(bytes.len())(bytes)?; - - // take all bytes as there must not be more data after the arguments - // returning an empty remain data. NOTE: we use take(bytes.len()), to offset - // the remainder bytes as it is used to set the tx.remainder, which is use - // to calculate the last_tx_block during the transaction signing process - Ok((raw, Self(args))) - } - - pub fn num_args(&self) -> Result { - be_u32::<_, ParserError>(self.0) - .map(|res| res.1) - .map_err(|_| ParserError::UnexpectedError) - } - - pub fn argument_at(&self, at: usize) -> Result, ParserError> { - check_canary!(); - - let mut idx = 0; - let num_args = self.num_args()?; - - // skip the first 4-bytes - let mut leftover = &self.0[4..]; - - while idx < num_args as usize { - let (bytes, value) = Value::from_bytes::(leftover) - .map_err(|_| ParserError::InvalidArgumentId)?; - - leftover = bytes; - if idx == at { - return Ok(value); - } - idx += 1; - } - Err(ParserError::DisplayIdxOutOfRange) - } -} - -/// A transaction that calls into a smart contract -#[repr(C)] -#[derive(Clone, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub struct TransactionContractCall<'a>(&'a [u8]); - -impl<'a> TransactionContractCall<'a> { - #[inline(never)] - fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { - let (raw, _) = StacksAddress::from_bytes(bytes)?; - // get contract name and function name. - let (raw2, _) = tuple((ContractName::from_bytes, ClarityName::from_bytes))(raw)?; - let (leftover, _) = Arguments::from_bytes(raw2)?; - let len = bytes.len() - leftover.len(); - let (_, data) = take(len)(bytes)?; - check_canary!(); - Ok((leftover, Self(data))) - } - - pub fn contract_name(&'a self) -> Result, ParserError> { - let at = HASH160_LEN + 1; - ContractName::from_bytes(&self.0[at..]) - .map(|(_, name)| name) - .map_err(|e| e.into()) - } - - pub fn function_name(&self) -> Result<&[u8], ParserError> { - ContractName::from_bytes(&self.0[(HASH160_LEN + 1)..]) - .and_then(|b| ClarityName::from_bytes(b.0)) - .map(|res| (res.1).0) - .map_err(|_| ParserError::UnexpectedError) - } - - pub fn function_args(&self) -> Result, ParserError> { - ContractName::from_bytes(&self.0[(HASH160_LEN + 1)..]) - .and_then(|b| ClarityName::from_bytes(b.0)) - .and_then(|c| Arguments::from_bytes(c.0)) - .map(|res| res.1) - .map_err(|_| ParserError::InvalidArgumentId) - } - - pub fn num_args(&self) -> Result { - self.function_args().and_then(|args| args.num_args()) - } - - #[inline(never)] - pub fn contract_address( - &self, - ) -> Result, ParserError> { - let version = self.0[0]; - c32::c32_address(version, &self.0[1..21]) - } - - // change label if it is a stacking contract call - fn label_stacking_value(&self, key: &mut [u8]) -> Result<(), ParserError> { - let addr = self.contract_address()?; - let addr = addr.as_ref(); - let contract_name = self.contract_name()?; - if (addr == "SP000000000000000000002Q6VF78".as_bytes() - || addr == "ST000000000000000000002AMW42H".as_bytes()) - && contract_name.name() == "pox".as_bytes() - { - let name = self.function_name()?; - if name == "stack-stx".as_bytes() { - key.iter_mut().for_each(|v| *v = 0); - let mut writer = zxformat::Writer::new(key); - writer - .write_str("stacked uSTX") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - } else if name == "delegate-stx".as_bytes() { - key.iter_mut().for_each(|v| *v = 0); - let mut writer = zxformat::Writer::new(key); - writer - .write_str("delegated uSTX") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - } - } - Ok(()) - } - - fn get_contract_call_args( - &'a self, - display_idx: u8, - out_key: &mut [u8], - out_value: &mut [u8], - page_idx: u8, - ) -> Result { - if display_idx < CONTRACT_CALL_BASE_ITEMS { - return Err(ParserError::DisplayIdxOutOfRange); - } - let arg_num = display_idx - CONTRACT_CALL_BASE_ITEMS; - - let args = self.function_args()?; - - let value = args.argument_at(arg_num as _)?; - - { - let mut writer_key = zxformat::Writer::new(out_key); - let mut arg_num_buff = [0u8; 3]; - let arg_num_str = arg_num.numtoa_str(10, &mut arg_num_buff); - - writer_key - .write_str("arg") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - writer_key - .write_str(arg_num_str) - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - } - - // return the value content including the valueID - let payload = value.payload(); - - match value.value_id() { - ValueId::Int => { - let value = value.int().ok_or(ParserError::UnexpectedError)?; - let mut buff = [0u8; 39]; - - zxformat::pageString( - out_value, - value.numtoa_str(10, &mut buff).as_bytes(), - page_idx, - ) - } - ValueId::UInt => { - let value = value.uint().ok_or(ParserError::UnexpectedError)?; - let mut buff = [0u8; 39]; - - if arg_num == 0 { - self.label_stacking_value(out_key)?; - } - - zxformat::pageString( - out_value, - value.numtoa_str(10, &mut buff).as_bytes(), - page_idx, - ) - } - ValueId::BoolTrue => { - zxformat::pageString(out_value, "is bool: true".as_bytes(), page_idx) - } - ValueId::BoolFalse => { - zxformat::pageString(out_value, "is bool: false".as_bytes(), page_idx) - } - ValueId::OptionalNone => { - zxformat::pageString(out_value, "is Option: None".as_bytes(), page_idx) - } - ValueId::OptionalSome => { - zxformat::pageString(out_value, "is Option: Some".as_bytes(), page_idx) - } - ValueId::ResponseOk => { - zxformat::pageString(out_value, "is Result: Ok".as_bytes(), page_idx) - } - ValueId::ResponseErr => { - zxformat::pageString(out_value, "is Result: Err".as_bytes(), page_idx) - } - ValueId::StandardPrincipal => { - let (_, principal) = PrincipalData::standard_from_bytes(payload)?; - let address = principal.encoded_address()?; - zxformat::pageString(out_value, &address[0..address.len()], page_idx) - } - ValueId::ContractPrincipal => { - // holds principal_encoded address + '.' + contract_name - let mut data = [0; C32_ENCODED_ADDRS_LENGTH + ClarityName::MAX_LEN as usize + 1]; - - let (_, principal) = PrincipalData::contract_principal_from_bytes(payload)?; - let address = principal.encoded_address()?; - - // should not fail as this was parsed in previous step - let contract_name = principal.contract_name().apdu_unwrap(); - - data.get_mut(..address.len()) - .apdu_unwrap() - .copy_from_slice(&address[0..address.len()]); - - data[address.len()] = b'.'; - let len = address.len() + 1; - - // wont panic as we reserved enough space. - data.get_mut(len..len + contract_name.len()) - .apdu_unwrap() - .copy_from_slice(contract_name.name()); - - zxformat::pageString(out_value, &data[0..len + contract_name.len()], page_idx) - } - ValueId::Buffer => zxformat::pageString(out_value, "is Buffer".as_bytes(), page_idx), - ValueId::List => zxformat::pageString(out_value, "is List".as_bytes(), page_idx), - ValueId::Tuple => zxformat::pageString(out_value, "is Tuple".as_bytes(), page_idx), - ValueId::StringAscii => { - // 4 bytes encode the length of the string - let len = if payload.len() - 4 > MAX_STRING_ASCII_TO_SHOW { - MAX_STRING_ASCII_TO_SHOW - } else { - payload.len() - }; - zxformat::pageString( - out_value, - &payload[4..len], // omit the first 4-bytes as they are the string length - page_idx, - ) - } - - ValueId::StringUtf8 => { - zxformat::pageString(out_value, "is StringUtf8".as_bytes(), page_idx) - } - } - } - - pub fn num_items(&self) -> Result { - // contract-address, contract-name, function-name - // + the number of arguments - let num_args = self.num_args()? as u8; - num_args - .checked_add(CONTRACT_CALL_BASE_ITEMS) - .ok_or(ParserError::ValueOutOfRange) - } - - fn get_base_items( - &self, - display_idx: u8, - out_key: &mut [u8], - out_value: &mut [u8], - page_idx: u8, - ) -> Result { - if display_idx > CONTRACT_CALL_BASE_ITEMS { - return Err(ParserError::DisplayIdxOutOfRange); - } - let mut writer_key = zxformat::Writer::new(out_key); - match display_idx { - // Contract-address - 0 => { - writer_key - .write_str("Contract address") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - let address = self.contract_address()?; - check_canary!(); - zxformat::pageString(out_value, address.as_ref(), page_idx) - } - // Contract.name - 1 => { - writer_key - .write_str("Contract name") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - let name = self.contract_name()?; - check_canary!(); - zxformat::pageString(out_value, name.name(), page_idx) - } - // Function-name - 2 => { - writer_key - .write_str("Function name") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - let name = self.function_name()?; - check_canary!(); - zxformat::pageString(out_value, name, page_idx) - } - _ => Err(ParserError::DisplayIdxOutOfRange), - } - } - - fn get_contract_call_items( - &self, - display_idx: u8, - out_key: &mut [u8], - out_value: &mut [u8], - page_idx: u8, - ) -> Result { - // display_idx was already normalize - if display_idx < CONTRACT_CALL_BASE_ITEMS { - self.get_base_items(display_idx, out_key, out_value, page_idx) - } else { - self.get_contract_call_args(display_idx, out_key, out_value, page_idx) - } - } -} - -/// A transaction that deploys a versioned smart contract -#[repr(C)] -#[derive(Clone, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub struct VersionedSmartContract<'a>(&'a [u8]); - -impl<'a> VersionedSmartContract<'a> { - #[inline(never)] - fn from_bytes(input: &'a [u8]) -> Result<(&[u8], Self), ParserError> { - check_canary!(); - - // clarity version - // len prefixed contract name - // len prefixed contract code - let parse_tag = alt((tag(&[0x01]), tag(&[0x02]))); - let parse_length_1_byte = map(be_u8, |length| std::cmp::min(length, 128u8) as usize); - let parse_length_4_bytes = flat_map(be_u32, take); - - let mut parser = tuple(( - parse_tag, - flat_map(parse_length_1_byte, take), - parse_length_4_bytes, - )); - let (_, (_, name, code)) = parser(input)?; - - // 1-byte tag, 1-byte name_len, name, 4-byte code_len, code - let total_length = 1 + 1 + name.len() + 4 + code.len(); - let (rem, res) = take(total_length)(input)?; - - Ok((rem, Self(res))) - } - - pub fn contract_name(&'a self) -> Result, ParserError> { - // skip the tag. safe ecause this was checked during parsing - ContractName::from_bytes(&self.0[1..]) - .map(|(_, res)| res) - .map_err(|e| e.into()) - } - - #[inline(never)] - fn get_contract_items( - &self, - display_idx: u8, - out_key: &mut [u8], - out_value: &mut [u8], - page_idx: u8, - ) -> Result { - let mut writer_key = zxformat::Writer::new(out_key); - - match display_idx { - 0 => { - writer_key - .write_str("Contract Name") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - check_canary!(); - let name = self.contract_name()?; - zxformat::pageString(out_value, name.name(), page_idx) - } - _ => Err(ParserError::ValueOutOfRange), - } - } -} - -/// A transaction that instantiates a smart contract -#[repr(C)] -#[derive(Clone, PartialEq)] -#[cfg_attr(test, derive(Debug))] -pub struct TransactionSmartContract<'a>(&'a [u8]); - -impl<'a> TransactionSmartContract<'a> { - #[inline(never)] - fn from_bytes(bytes: &'a [u8]) -> Result<(&[u8], Self), ParserError> { - check_canary!(); - - // len prefixed contract name - // len prefixed contract code - let parse_length_1_byte = map(be_u8, |length| std::cmp::min(length, 128u8) as usize); - let parse_length_4_bytes = flat_map(be_u32, take); - - let mut parser = tuple((flat_map(parse_length_1_byte, take), parse_length_4_bytes)); - let (_, (name, code)) = parser(bytes)?; - - // 1-byte name_len, name, 4-byte code_len, code - let total_length = 1 + name.len() + 4 + code.len(); - let (rem, res) = take(total_length)(bytes)?; - - Ok((rem, Self(res))) - } - - pub fn contract_name(&'a self) -> Result, ParserError> { - ContractName::from_bytes(self.0) - .map(|(_, res)| res) - .map_err(|e| e.into()) - } - - #[inline(never)] - fn get_contract_items( - &self, - display_idx: u8, - out_key: &mut [u8], - out_value: &mut [u8], - page_idx: u8, - ) -> Result { - let mut writer_key = zxformat::Writer::new(out_key); - - match display_idx { - 0 => { - writer_key - .write_str("Contract Name") - .map_err(|_| ParserError::UnexpectedBufferEnd)?; - check_canary!(); - let name = self.contract_name()?; - zxformat::pageString(out_value, name.name(), page_idx) - } - _ => Err(ParserError::ValueOutOfRange), - } - } -} - #[repr(u8)] #[derive(Clone, PartialEq, Copy)] #[cfg_attr(test, derive(Debug))] @@ -753,6 +170,15 @@ impl<'a> TransactionPayload<'a> { } } } + + pub fn raw_payload(&self) -> &'a [u8] { + match self { + Self::TokenTransfer(token) => token.raw_data(), + Self::SmartContract(contract) => contract.raw_data(), + Self::ContractCall(call) => call.raw_data(), + Self::VersionedSmartContract(deploy) => deploy.raw_data(), + } + } } #[cfg(test)] diff --git a/app/rust/src/parser/transaction_payload/arguments.rs b/app/rust/src/parser/transaction_payload/arguments.rs new file mode 100644 index 00000000..e4375ec9 --- /dev/null +++ b/app/rust/src/parser/transaction_payload/arguments.rs @@ -0,0 +1,75 @@ +use nom::{bytes::complete::take, number::complete::be_u32}; + +use crate::{ + check_canary, is_expert_mode, + parser::{ParserError, Value, TX_DEPTH_LIMIT}, +}; + +// The number of contract call arguments we can handle. +// this can be adjusted, but keep in mind that higher values could +// hit stack overflows issues. +pub const MAX_NUM_ARGS: u32 = 10; + +#[repr(C)] +#[derive(Clone, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub struct Arguments<'a>(&'a [u8]); + +impl<'a> Arguments<'a> { + #[inline(never)] + pub fn from_bytes(bytes: &'a [u8]) -> Result<(&[u8], Self), nom::Err> { + check_canary!(); + + let (mut rem, num_args) = be_u32::<_, ParserError>(bytes)?; + + if num_args > MAX_NUM_ARGS && !is_expert_mode() { + return Err(ParserError::InvalidTransactionPayload.into()); + } + + // Parse all arguments so we can be sure that at runtime when each + // argument is retrieved it does not crashes + for _ in 0..num_args { + let (leftover, _) = Value::from_bytes::(rem) + .map_err(|_| ParserError::InvalidArgumentId)?; + + rem = leftover; + } + + let len = bytes.len() - rem.len(); + let (rem, args) = take(len)(bytes)?; + + // take all bytes as there must not be more data after the arguments + // returning an empty remain data. NOTE: we use take(bytes.len()), to offset + // the remainder bytes as it is used to set the tx.remainder, which is use + // to calculate the last_tx_block during the transaction signing process + Ok((rem, Self(args))) + } + + pub fn num_args(&self) -> Result { + be_u32::<_, ParserError>(self.0) + .map(|res| res.1) + .map_err(|_| ParserError::UnexpectedError) + } + + pub fn argument_at(&self, at: usize) -> Result, ParserError> { + check_canary!(); + + let mut idx = 0; + let num_args = self.num_args()?; + + // skip the first 4-bytes + let mut leftover = &self.0[4..]; + + while idx < num_args as usize { + let (bytes, value) = Value::from_bytes::(leftover) + .map_err(|_| ParserError::InvalidArgumentId)?; + + leftover = bytes; + if idx == at { + return Ok(value); + } + idx += 1; + } + Err(ParserError::DisplayIdxOutOfRange) + } +} diff --git a/app/rust/src/parser/transaction_payload/contract_call.rs b/app/rust/src/parser/transaction_payload/contract_call.rs new file mode 100644 index 00000000..e8aa51dc --- /dev/null +++ b/app/rust/src/parser/transaction_payload/contract_call.rs @@ -0,0 +1,302 @@ +use core::fmt::Write; + +use nom::{bytes::complete::take, sequence::tuple}; +use numtoa::NumToA; + +use crate::{ + check_canary, + parser::{ + c32, transaction_payload::arguments::Arguments, ApduPanic, ClarityName, ContractName, + ParserError, PrincipalData, StacksAddress, ValueId, C32_ENCODED_ADDRS_LENGTH, HASH160_LEN, + }, + zxformat, +}; + +pub const MAX_STRING_ASCII_TO_SHOW: usize = 60; +// The items in contract_call transactions are +// contract_address, contract_name and function_name +pub const CONTRACT_CALL_BASE_ITEMS: u8 = 3; +/// A transaction that calls into a smart contract +#[repr(C)] +#[derive(Clone, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub struct TransactionContractCall<'a>(&'a [u8]); + +impl<'a> TransactionContractCall<'a> { + #[inline(never)] + pub fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { + let (rem, _) = StacksAddress::from_bytes(bytes)?; + // get contract name and function name. + let (rem, _) = tuple(( + ContractName::from_bytes, + ClarityName::from_bytes, + Arguments::from_bytes, + ))(rem)?; + + let len = bytes.len() - rem.len(); + let (rem, data) = take(len)(bytes)?; + + check_canary!(); + + Ok((rem, Self(data))) + } + + pub fn contract_name(&'a self) -> Result, ParserError> { + let at = HASH160_LEN + 1; + ContractName::from_bytes(&self.0[at..]) + .map(|(_, name)| name) + .map_err(|e| e.into()) + } + + pub fn function_name(&self) -> Result<&[u8], ParserError> { + ContractName::from_bytes(&self.0[(HASH160_LEN + 1)..]) + .and_then(|b| ClarityName::from_bytes(b.0)) + .map(|res| (res.1).0) + .map_err(|_| ParserError::UnexpectedError) + } + + pub fn function_args(&self) -> Result, ParserError> { + ContractName::from_bytes(&self.0[(HASH160_LEN + 1)..]) + .and_then(|b| ClarityName::from_bytes(b.0)) + .and_then(|c| Arguments::from_bytes(c.0)) + .map(|res| res.1) + .map_err(|_| ParserError::InvalidArgumentId) + } + + pub fn num_args(&self) -> Result { + self.function_args().and_then(|args| args.num_args()) + } + + #[inline(never)] + pub fn contract_address( + &self, + ) -> Result, ParserError> { + let version = self.0[0]; + c32::c32_address(version, &self.0[1..21]) + } + + // change label if it is a stacking contract call + fn label_stacking_value(&self, key: &mut [u8]) -> Result<(), ParserError> { + let addr = self.contract_address()?; + let addr = addr.as_ref(); + let contract_name = self.contract_name()?; + if (addr == "SP000000000000000000002Q6VF78".as_bytes() + || addr == "ST000000000000000000002AMW42H".as_bytes()) + && contract_name.name() == "pox".as_bytes() + { + let name = self.function_name()?; + if name == "stack-stx".as_bytes() { + key.iter_mut().for_each(|v| *v = 0); + let mut writer = zxformat::Writer::new(key); + writer + .write_str("stacked uSTX") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + } else if name == "delegate-stx".as_bytes() { + key.iter_mut().for_each(|v| *v = 0); + let mut writer = zxformat::Writer::new(key); + writer + .write_str("delegated uSTX") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + } + } + Ok(()) + } + + fn get_contract_call_args( + &'a self, + display_idx: u8, + out_key: &mut [u8], + out_value: &mut [u8], + page_idx: u8, + ) -> Result { + if display_idx < CONTRACT_CALL_BASE_ITEMS { + return Err(ParserError::DisplayIdxOutOfRange); + } + let arg_num = display_idx - CONTRACT_CALL_BASE_ITEMS; + + let args = self.function_args()?; + + let value = args.argument_at(arg_num as _)?; + + { + let mut writer_key = zxformat::Writer::new(out_key); + let mut arg_num_buff = [0u8; 3]; + let arg_num_str = arg_num.numtoa_str(10, &mut arg_num_buff); + + writer_key + .write_str("arg") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + writer_key + .write_str(arg_num_str) + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + } + + // return the value content including the valueID + let payload = value.payload(); + + match value.value_id() { + ValueId::Int => { + let value = value.int().ok_or(ParserError::UnexpectedError)?; + let mut buff = [0u8; 39]; + + zxformat::pageString( + out_value, + value.numtoa_str(10, &mut buff).as_bytes(), + page_idx, + ) + } + ValueId::UInt => { + let value = value.uint().ok_or(ParserError::UnexpectedError)?; + let mut buff = [0u8; 39]; + + if arg_num == 0 { + self.label_stacking_value(out_key)?; + } + + zxformat::pageString( + out_value, + value.numtoa_str(10, &mut buff).as_bytes(), + page_idx, + ) + } + ValueId::BoolTrue => { + zxformat::pageString(out_value, "is bool: true".as_bytes(), page_idx) + } + ValueId::BoolFalse => { + zxformat::pageString(out_value, "is bool: false".as_bytes(), page_idx) + } + ValueId::OptionalNone => { + zxformat::pageString(out_value, "is Option: None".as_bytes(), page_idx) + } + ValueId::OptionalSome => { + zxformat::pageString(out_value, "is Option: Some".as_bytes(), page_idx) + } + ValueId::ResponseOk => { + zxformat::pageString(out_value, "is Result: Ok".as_bytes(), page_idx) + } + ValueId::ResponseErr => { + zxformat::pageString(out_value, "is Result: Err".as_bytes(), page_idx) + } + ValueId::StandardPrincipal => { + let (_, principal) = PrincipalData::standard_from_bytes(payload)?; + let address = principal.encoded_address()?; + zxformat::pageString(out_value, &address[0..address.len()], page_idx) + } + ValueId::ContractPrincipal => { + // holds principal_encoded address + '.' + contract_name + let mut data = [0; C32_ENCODED_ADDRS_LENGTH + ClarityName::MAX_LEN as usize + 1]; + + let (_, principal) = PrincipalData::contract_principal_from_bytes(payload)?; + let address = principal.encoded_address()?; + + // should not fail as this was parsed in previous step + let contract_name = principal.contract_name().apdu_unwrap(); + + data.get_mut(..address.len()) + .apdu_unwrap() + .copy_from_slice(&address[0..address.len()]); + + data[address.len()] = b'.'; + let len = address.len() + 1; + + // wont panic as we reserved enough space. + data.get_mut(len..len + contract_name.len()) + .apdu_unwrap() + .copy_from_slice(contract_name.name()); + + zxformat::pageString(out_value, &data[0..len + contract_name.len()], page_idx) + } + ValueId::Buffer => zxformat::pageString(out_value, "is Buffer".as_bytes(), page_idx), + ValueId::List => zxformat::pageString(out_value, "is List".as_bytes(), page_idx), + ValueId::Tuple => zxformat::pageString(out_value, "is Tuple".as_bytes(), page_idx), + ValueId::StringAscii => { + // 4 bytes encode the length of the string + let len = if payload.len() - 4 > MAX_STRING_ASCII_TO_SHOW { + MAX_STRING_ASCII_TO_SHOW + } else { + payload.len() + }; + zxformat::pageString( + out_value, + &payload[4..len], // omit the first 4-bytes as they are the string length + page_idx, + ) + } + + ValueId::StringUtf8 => { + zxformat::pageString(out_value, "is StringUtf8".as_bytes(), page_idx) + } + } + } + + pub fn num_items(&self) -> Result { + // contract-address, contract-name, function-name + // + the number of arguments + let num_args = self.num_args()? as u8; + num_args + .checked_add(CONTRACT_CALL_BASE_ITEMS) + .ok_or(ParserError::ValueOutOfRange) + } + + fn get_base_items( + &self, + display_idx: u8, + out_key: &mut [u8], + out_value: &mut [u8], + page_idx: u8, + ) -> Result { + if display_idx > CONTRACT_CALL_BASE_ITEMS { + return Err(ParserError::DisplayIdxOutOfRange); + } + let mut writer_key = zxformat::Writer::new(out_key); + match display_idx { + // Contract-address + 0 => { + writer_key + .write_str("Contract address") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + let address = self.contract_address()?; + check_canary!(); + zxformat::pageString(out_value, address.as_ref(), page_idx) + } + // Contract.name + 1 => { + writer_key + .write_str("Contract name") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + let name = self.contract_name()?; + check_canary!(); + zxformat::pageString(out_value, name.name(), page_idx) + } + // Function-name + 2 => { + writer_key + .write_str("Function name") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + let name = self.function_name()?; + check_canary!(); + zxformat::pageString(out_value, name, page_idx) + } + _ => Err(ParserError::DisplayIdxOutOfRange), + } + } + + pub fn get_contract_call_items( + &self, + display_idx: u8, + out_key: &mut [u8], + out_value: &mut [u8], + page_idx: u8, + ) -> Result { + // display_idx was already normalize + if display_idx < CONTRACT_CALL_BASE_ITEMS { + self.get_base_items(display_idx, out_key, out_value, page_idx) + } else { + self.get_contract_call_args(display_idx, out_key, out_value, page_idx) + } + } + + pub fn raw_data(&self) -> &'a [u8] { + self.0 + } +} diff --git a/app/rust/src/parser/transaction_payload/smart_contract.rs b/app/rust/src/parser/transaction_payload/smart_contract.rs new file mode 100644 index 00000000..c04ea40f --- /dev/null +++ b/app/rust/src/parser/transaction_payload/smart_contract.rs @@ -0,0 +1,74 @@ +use core::fmt::Write; + +use nom::{ + bytes::complete::take, + combinator::{flat_map, map}, + number::complete::{be_u32, be_u8}, + sequence::tuple, +}; + +use crate::{ + check_canary, + parser::{ContractName, ParserError}, + zxformat, +}; + +/// A transaction that instantiates a smart contract +#[repr(C)] +#[derive(Clone, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub struct TransactionSmartContract<'a>(&'a [u8]); + +impl<'a> TransactionSmartContract<'a> { + #[inline(never)] + pub fn from_bytes(bytes: &'a [u8]) -> Result<(&[u8], Self), ParserError> { + check_canary!(); + + // len prefixed contract name + // len prefixed contract code + let parse_length_1_byte = map(be_u8, |length| std::cmp::min(length, 128u8) as usize); + let parse_length_4_bytes = flat_map(be_u32, take); + + let mut parser = tuple((flat_map(parse_length_1_byte, take), parse_length_4_bytes)); + let (_, (name, code)) = parser(bytes)?; + + // 1-byte name_len, name, 4-byte code_len, code + let total_length = 1 + name.len() + 4 + code.len(); + let (rem, res) = take(total_length)(bytes)?; + + Ok((rem, Self(res))) + } + + pub fn contract_name(&'a self) -> Result, ParserError> { + ContractName::from_bytes(self.0) + .map(|(_, res)| res) + .map_err(|e| e.into()) + } + + #[inline(never)] + pub fn get_contract_items( + &self, + display_idx: u8, + out_key: &mut [u8], + out_value: &mut [u8], + page_idx: u8, + ) -> Result { + let mut writer_key = zxformat::Writer::new(out_key); + + match display_idx { + 0 => { + writer_key + .write_str("Contract Name") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + check_canary!(); + let name = self.contract_name()?; + zxformat::pageString(out_value, name.name(), page_idx) + } + _ => Err(ParserError::ValueOutOfRange), + } + } + + pub fn raw_data(&self) -> &'a [u8] { + self.0 + } +} diff --git a/app/rust/src/parser/transaction_payload/token_transfer.rs b/app/rust/src/parser/transaction_payload/token_transfer.rs new file mode 100644 index 00000000..83e0d3b2 --- /dev/null +++ b/app/rust/src/parser/transaction_payload/token_transfer.rs @@ -0,0 +1,139 @@ +use core::fmt::Write; + +use arrayvec::ArrayVec; +use nom::{ + bytes::complete::take, + number::complete::{be_u64, le_u8}, +}; + +use crate::{ + check_canary, + parser::{ + c32, ApduPanic, ParserError, PrincipalData, AMOUNT_LEN, C32_ENCODED_ADDRS_LENGTH, MEMO_LEN, + }, + zxformat, +}; + +#[repr(u8)] +#[derive(Clone, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub enum TokenTranferPrincipal { + Standard = 0x05, + Contract = 0x06, +} + +impl TokenTranferPrincipal { + fn from_u8(v: u8) -> Result { + match v { + 5 => Ok(Self::Standard), + 6 => Ok(Self::Contract), + _ => Err(ParserError::InvalidTokenTransferPrincipal), + } + } +} + +#[repr(C)] +#[derive(Clone, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub struct StxTokenTransfer<'a>(&'a [u8]); + +impl<'a> StxTokenTransfer<'a> { + #[inline(never)] + pub fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { + let id = le_u8(bytes)?; + let (raw, _) = match TokenTranferPrincipal::from_u8(id.1)? { + TokenTranferPrincipal::Standard => PrincipalData::standard_from_bytes(id.0)?, + TokenTranferPrincipal::Contract => PrincipalData::contract_principal_from_bytes(id.0)?, + }; + // Besides principal we take 34-bytes being the MEMO message + 8-bytes amount of stx + let len = bytes.len() - raw.len() + MEMO_LEN + AMOUNT_LEN; + let (raw, data) = take(len)(bytes)?; + Ok((raw, Self(data))) + } + + pub fn memo(&self) -> &[u8] { + let at = self.0.len() - MEMO_LEN; + // safe to unwrap as parser checked for proper len + self.0.get(at..).apdu_unwrap() + } + + pub fn amount(&self) -> Result { + let at = self.0.len() - MEMO_LEN - AMOUNT_LEN; + let amount = self.0.get(at..).ok_or(ParserError::NoData)?; + be_u64::<_, ParserError>(amount) + .map(|res| res.1) + .map_err(|_| ParserError::UnexpectedBufferEnd) + } + + pub fn raw_address(&self) -> &[u8] { + // Skips the principal-id and hash_mode + // is valid as this was check by the parser + // safe to unwrap as this was checked at parsing + self.0.get(2..22).apdu_unwrap() + } + + pub fn encoded_address( + &self, + ) -> Result, ParserError> { + // Skips the principal-id at [0] and uses hash_mode and the follow 20-bytes + let version = self.0.get(1).ok_or(ParserError::NoData)?; + c32::c32_address( + *version, + self.0.get(2..22).ok_or(ParserError::InvalidAddress)?, + ) + } + + pub fn amount_stx(&self) -> Result, ParserError> { + let mut output = ArrayVec::from([0u8; zxformat::MAX_STR_BUFF_LEN]); + let amount = self.amount()?; + let len = zxformat::u64_to_str(output.as_mut(), amount)?.len(); + unsafe { + output.set_len(len); + } + check_canary!(); + Ok(output) + } + + pub fn get_token_transfer_items( + &self, + display_idx: u8, + out_key: &mut [u8], + out_value: &mut [u8], + page_idx: u8, + ) -> Result { + let mut writer_key = zxformat::Writer::new(out_key); + + match display_idx { + // Fomatting the amount in stx + 0 => { + writer_key + .write_str("Amount uSTX") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + let amount = self.amount_stx()?; + check_canary!(); + zxformat::pageString(out_value, amount.as_ref(), page_idx) + } + // Recipient address + 1 => { + writer_key + .write_str("To") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + let recipient = self.encoded_address()?; + check_canary!(); + zxformat::pageString(out_value, recipient.as_ref(), page_idx) + } + 2 => { + writer_key + .write_str("Memo") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + check_canary!(); + zxformat::pageString(out_value, self.memo(), page_idx) + } + _ => Err(ParserError::DisplayIdxOutOfRange), + } + } + + pub fn raw_data(&self) -> &'a [u8] { + self.0 + } +} diff --git a/app/rust/src/parser/transaction_payload/versioned_contract.rs b/app/rust/src/parser/transaction_payload/versioned_contract.rs new file mode 100644 index 00000000..97589d61 --- /dev/null +++ b/app/rust/src/parser/transaction_payload/versioned_contract.rs @@ -0,0 +1,82 @@ +use core::fmt::Write; + +use nom::{ + branch::alt, + bytes::complete::{tag, take}, + combinator::{flat_map, map}, + number::complete::{be_u32, be_u8}, + sequence::tuple, +}; + +use crate::{ + check_canary, + parser::{ContractName, ParserError}, + zxformat, +}; + +/// A transaction that deploys a versioned smart contract +#[repr(C)] +#[derive(Clone, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub struct VersionedSmartContract<'a>(&'a [u8]); + +impl<'a> VersionedSmartContract<'a> { + #[inline(never)] + pub fn from_bytes(input: &'a [u8]) -> Result<(&[u8], Self), ParserError> { + check_canary!(); + + // clarity version + // len prefixed contract name + // len prefixed contract code + let parse_tag = alt((tag(&[0x01]), tag(&[0x02]))); + let parse_length_1_byte = map(be_u8, |length| std::cmp::min(length, 128u8) as usize); + let parse_length_4_bytes = flat_map(be_u32, take); + + let mut parser = tuple(( + parse_tag, + flat_map(parse_length_1_byte, take), + parse_length_4_bytes, + )); + let (_, (_, name, code)) = parser(input)?; + + // 1-byte tag, 1-byte name_len, name, 4-byte code_len, code + let total_length = 1 + 1 + name.len() + 4 + code.len(); + let (rem, res) = take(total_length)(input)?; + + Ok((rem, Self(res))) + } + + pub fn contract_name(&'a self) -> Result, ParserError> { + // skip the tag. safe ecause this was checked during parsing + ContractName::from_bytes(&self.0[1..]) + .map(|(_, res)| res) + .map_err(|e| e.into()) + } + + #[inline(never)] + pub fn get_contract_items( + &self, + display_idx: u8, + out_key: &mut [u8], + out_value: &mut [u8], + page_idx: u8, + ) -> Result { + let mut writer_key = zxformat::Writer::new(out_key); + + match display_idx { + 0 => { + writer_key + .write_str("Contract Name") + .map_err(|_| ParserError::UnexpectedBufferEnd)?; + check_canary!(); + let name = self.contract_name()?; + zxformat::pageString(out_value, name.name(), page_idx) + } + _ => Err(ParserError::ValueOutOfRange), + } + } + + pub fn raw_data(&self) -> &'a [u8] { + self.0 + } +} diff --git a/app/rust/src/parser/tx_post_conditions.rs b/app/rust/src/parser/tx_post_conditions.rs new file mode 100644 index 00000000..f1cd8c8c --- /dev/null +++ b/app/rust/src/parser/tx_post_conditions.rs @@ -0,0 +1,169 @@ +use arrayvec::ArrayVec; +use nom::{ + combinator::iterator, + number::complete::{be_u32, le_u8}, +}; + +use crate::{bolos::c_zemu_log_stack, check_canary, parser::TransactionPostCondition}; + +use super::{ParserError, NUM_SUPPORTED_POST_CONDITIONS}; + +#[repr(u8)] +#[derive(Clone, PartialEq, Copy)] +#[cfg_attr(test, derive(Debug))] +pub enum TransactionPostConditionMode { + Allow = 0x01, // allow any other changes not specified + Deny = 0x02, // deny any other changes not specified +} + +impl TransactionPostConditionMode { + #[inline(never)] + fn from_u8(v: u8) -> Option { + match v { + 1 => Some(Self::Allow), + 2 => Some(Self::Deny), + _ => None, + } + } + + #[inline(never)] + fn from_bytes(bytes: &[u8]) -> nom::IResult<&[u8], Self, ParserError> { + let mode = le_u8(bytes)?; + let tx_mode = Self::from_u8(mode.1).ok_or(ParserError::UnexpectedError)?; + check_canary!(); + Ok((mode.0, tx_mode)) + } +} + +#[repr(C)] +#[derive(Clone, PartialEq)] +#[cfg_attr(test, derive(Debug))] +pub struct PostConditions<'a> { + pub(crate) conditions: ArrayVec<[&'a [u8]; NUM_SUPPORTED_POST_CONDITIONS]>, + // The number of items to display to the user + num_items: u8, + // The number of post_conditions in our list + num_conditions: usize, + current_idx: u8, +} + +impl<'a> PostConditions<'a> { + #[inline(never)] + pub fn from_bytes(bytes: &'a [u8]) -> nom::IResult<&[u8], Self, ParserError> { + let (raw, len) = be_u32::<_, ParserError>(bytes)?; + + if len > NUM_SUPPORTED_POST_CONDITIONS as u32 { + return Err(nom::Err::Error(ParserError::ValueOutOfRange)); + } + let mut conditions: ArrayVec<[&'a [u8]; NUM_SUPPORTED_POST_CONDITIONS]> = ArrayVec::new(); + let mut iter = iterator(raw, TransactionPostCondition::read_as_bytes); + iter.take(len as _).enumerate().for_each(|i| { + conditions.push(i.1); + }); + let res = iter.finish()?; + let num_items = Self::get_num_items(&conditions[..len as usize]); + check_canary!(); + Ok(( + res.0, + Self { + conditions, + num_items, + current_idx: 0, + num_conditions: len as usize, + }, + )) + } + + pub fn get_num_items(conditions: &[&[u8]]) -> u8 { + conditions + .iter() + .filter_map(|bytes| TransactionPostCondition::from_bytes(bytes).ok()) + .map(|condition| (condition.1).num_items()) + .sum() + } + + pub fn get_postconditions(&self) -> &[&[u8]] { + self.conditions.as_ref() + } + + pub fn num_conditions(&self) -> usize { + self.num_conditions + } + + #[inline(never)] + fn update_postcondition( + &mut self, + total_items: u8, + display_idx: u8, + ) -> Result { + // map display_idx to our range of items + let in_start = total_items - self.num_items; + let idx = self.map_idx(display_idx, in_start, total_items); + + let limit = self.get_current_limit(); + + // get the current postcondition which is used to + // check if it is time to change to the next/previous postconditions in our list + // and if that is not the case, we use it to get its items + let current_condition = self.current_post_condition()?; + + // before continuing we need to check if the current display_idx + // correspond to the current, next or previous postcondition + // if so, update it + if idx >= (limit + current_condition.num_items()) { + self.current_idx += 1; + // this should not happen + if self.current_idx > self.num_items { + return Err(ParserError::UnexpectedError); + } + } else if idx < limit && idx > 0 { + self.current_idx -= 1; + } + Ok(idx) + } + + #[inline(never)] + pub fn get_items( + &mut self, + display_idx: u8, + out_key: &mut [u8], + out_value: &mut [u8], + page_idx: u8, + num_items: u8, + ) -> Result { + c_zemu_log_stack("PostConditions::get_items\x00"); + + let idx = self.update_postcondition(num_items, display_idx)?; + let current_postcondition = self.current_post_condition()?; + current_postcondition.get_items(idx, out_key, out_value, page_idx) + } + + fn map_idx(&self, display_idx: u8, in_start: u8, in_end: u8) -> u8 { + let slope = self.num_items / (in_end - in_start); + slope * (display_idx - in_start) + } + + fn get_current_limit(&self) -> u8 { + let current = self.current_idx as usize; + self.conditions[..current] + .iter() + .filter_map(|bytes| TransactionPostCondition::from_bytes(bytes).ok()) + .map(|condition| (condition.1).num_items()) + .sum() + } + + fn current_post_condition(&self) -> Result { + let raw_current = self + .conditions + .get(self.current_idx as usize) + .ok_or(ParserError::ValueOutOfRange)?; + + TransactionPostCondition::from_bytes(raw_current) + .map_err(|_| ParserError::PostConditionFailed) + .map(|res| res.1) + } + + pub fn num_items(&self) -> u8 { + self.num_items + } +} diff --git a/app/rust/src/zxformat.rs b/app/rust/src/zxformat.rs index 6f78ea2a..6b133926 100644 --- a/app/rust/src/zxformat.rs +++ b/app/rust/src/zxformat.rs @@ -3,9 +3,7 @@ use core::fmt::{self, Write}; use crate::parser::ParserError; - -#[cfg(not(any(test, fuzzing)))] -use crate::parser::fp_uint64_to_str; +use lexical_core::Number; pub const MAX_STR_BUFF_LEN: usize = 30; @@ -39,59 +37,46 @@ impl<'a> fmt::Write for Writer<'a> { } macro_rules! num_to_str { - ($name: ident, $number: ty) => { - pub fn $name(output: &mut [u8], number: $number) -> Result { - if output.len() < 2 { + // we can use a procedural macro to "attach " the type name to the function name + // but lets do it later. + ($int_type:ty, $_name: ident) => { + pub fn $_name(output: &mut [u8], number: $int_type) -> Result<&mut [u8], ParserError> { + if output.len() < <$int_type>::FORMATTED_SIZE_DECIMAL { return Err(ParserError::UnexpectedBufferEnd); } - let len; - - #[cfg(any(test, fuzzing))] - { - let mut writer = Writer::new(output); - core::write!(writer, "{}", number).map_err(|_| ParserError::UnexpectedBufferEnd)?; + if number == 0 { + output[0] = b'0'; + return Ok(&mut output[..1]); + } - len = writer.offset; + let mut offset = 0; + let mut number = number; + while number != 0 { + let rem = number % 10; + output[offset] = b'0' + rem as u8; + offset += 1; + number /= 10; } - #[cfg(not(any(test, fuzzing)))] - { - // We add this path here because pic issues with the write! trait - // so that it is preferable to use the c implementation when running on - // the device. - unsafe { - len = fp_uint64_to_str( - output.as_mut_ptr() as _, - output.len() as u16, - number as _, - 0, - ) as usize; - } + // swap values + let len = offset; + let mut idx = 0; + while idx < offset { + offset -= 1; + output.swap(idx, offset); + idx += 1; } - Ok(len) + + Ok(&mut output[..len]) } }; } -num_to_str!(u64_to_str, u64); -num_to_str!(i64_to_str, i64); - -/// Fixed point u64 number -/// -/// Converts an u64 number into its fixed point string representation -/// using #decimals padding zeros -/// # Arguments -/// * * `out`: the output buffer where the conversion result is written -/// * `value`: The number to convert to -/// * `decimals`: the number of decimals after the decimal point -/// # Returns -/// The number of bytes written if success or Error otherwise -pub fn fpu64_to_str(out: &mut [u8], value: u64, decimals: u8) -> Result { - let mut temp = [0u8; MAX_STR_BUFF_LEN]; - let len = u64_to_str(temp.as_mut(), value)?; - fpstr_to_str(out, &temp[..len], decimals) -} +num_to_str!(u64, u64_to_str); +num_to_str!(u32, u32_to_str); +num_to_str!(u8, u8_to_str); +num_to_str!(i64, i64_to_str); /// Fixed point u64 number with native/test support /// @@ -105,29 +90,22 @@ pub fn fpu64_to_str(out: &mut [u8], value: u64, decimals: u8) -> Result Result { - let len = fpu64_to_str(out, value, decimals)? as usize; - Ok(len) -} - -/// Fixed point i64 number -/// -/// Converts an u64 number into its fixed point string representation -/// using decimals padding zeros -/// # Arguments -/// * * `out`: the output buffer where the conversion result is written -/// * `value`: The number to convert to -/// * `decimals`: the number of decimals after the decimal point -/// # Returns -/// The number of bytes written if success or Error otherwise -pub fn fpi64_to_str(out: &mut [u8], value: i64, decimals: u8) -> Result { - let mut temp = [0u8; MAX_STR_BUFF_LEN]; - let len = i64_to_str(temp.as_mut(), value)?; - fpstr_to_str(out, &temp[..len], decimals) +pub fn fpu64_to_str(out: &mut [u8], value: u64, decimals: u8) -> Result { + #[cfg(any(test, fuzzing))] + { + let mut temp = [0u8; u64::FORMATTED_SIZE_DECIMAL]; + let value = u64_to_str(temp.as_mut(), value)?; + fpstr_to_str(out, value, decimals) + } + #[cfg(not(any(test, fuzzing)))] + unsafe { + Ok(crate::parser::fp_uint64_to_str( + out.as_mut_ptr() as *mut i8, + out.len() as u16, + value, + decimals, + ) as usize) + } } pub(crate) fn fpstr_to_str( @@ -177,8 +155,11 @@ pub(crate) fn fpstr_to_str( } let fp = in_len - decimals as usize; - let left = str.get(0..fp).unwrap(); - let right = str.get(fp..in_len).unwrap(); + let left = str.get(0..fp).ok_or(ParserError::UnexpectedBufferEnd)?; + let right = str + .get(fp..in_len) + .ok_or(ParserError::UnexpectedBufferEnd)?; + write!(&mut writer, "{}.{}", left, right) .map(|_| writer.offset) .map_err(|_| ParserError::UnexpectedBufferEnd) @@ -226,61 +207,12 @@ mod test { #[test] fn test_u64_to_str() { - let mut output = [0u8; 10]; - assert!(u64_to_str(output.as_mut(), 125_550).is_ok()); - assert_eq!(&output[..6], b"125550"); - // overflow - assert!(u64_to_str(output.as_mut(), 12_521_547_982).is_err()); - } - - #[test] - fn test_i64_to_str() { - let mut output = [0u8; 10]; - assert!(i64_to_str(output.as_mut(), -125_550).is_ok()); - assert_eq!(&output[..7], b"-125550"); + let mut output = [0u8; u64::FORMATTED_SIZE_DECIMAL]; + let value = u64_to_str(output.as_mut(), 125_550).unwrap(); + std::println!("value: {}", core::str::from_utf8(value).unwrap()); + assert_eq!(&value, b"125550"); // overflow - assert!(i64_to_str(output.as_mut(), -1_234_567_890).is_err()); - } - - #[test] - fn test_fpi64_8decimals() { - let mut output = [0u8; 15]; - let len = fpi64_to_str(output.as_mut(), -1_234_567, 8).unwrap(); - let result = core::str::from_utf8(&output[..len]).unwrap(); - assert_eq!(result, "-0.01234567"); - } - - #[test] - fn test_fpi64_10decimals() { - let mut output = [0u8; 15]; - // With 10 decimals - let len = fpi64_to_str(output.as_mut(), -1_234_567, 10).unwrap(); - let result = core::str::from_utf8(&output[..len]).unwrap(); - assert_eq!(result, "-0.0001234567"); - } - - #[test] - fn test_fpi64_0decimals() { - let mut output = [0u8; 15]; - let len = fpi64_to_str(output.as_mut(), -1_234_567, 0).unwrap(); - let result = core::str::from_utf8(&output[..len]).unwrap(); - assert_eq!(result, "-1234567"); - } - - #[test] - fn test_fpi64_4decimals() { - let mut output = [0u8; 15]; - let len = fpi64_to_str(output.as_mut(), -1_234_567, 4).unwrap(); - let result = core::str::from_utf8(&output[..len]).unwrap(); - assert_eq!(result, "-123.4567"); - } - - #[test] - fn test_fpi64_overflow() { - let mut output = [0u8; 5]; - // overflow wit zero decimals - let result = fpi64_to_str(output.as_mut(), -102_123_456, 0); - assert!(result.is_err()); + assert!(u64_to_str(&mut output[..10], 12_521_547_982).is_err()); } #[test] diff --git a/tests_zemu/snapshots/fl-contract_call_long_args/00000.png b/tests_zemu/snapshots/fl-contract_call_long_args/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..7843caae327529a332d8db155a73202e2668d963 GIT binary patch literal 8856 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 QA|qq_C*%U*+||_o0;9^}Qvd(} literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-contract_call_long_args/00001.png b/tests_zemu/snapshots/fl-contract_call_long_args/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd4a5c95bb845b8fb254578940e0ebe154a7f0e GIT binary patch literal 16198 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-contract_call_long_args/00002.png b/tests_zemu/snapshots/fl-contract_call_long_args/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c80edadb5ec08132dc9fdae134e2ee82b8b3f203 GIT binary patch literal 16903 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-contract_call_long_args/00006.png b/tests_zemu/snapshots/fl-contract_call_long_args/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..639a00386a9a7ee4d2ef9bf3f3b34cd09aa97223 GIT binary patch literal 9530 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 XZa3V${G@<8Q6Mv8E2Bn(yGj26R}@@F literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-contract_call_long_args/00007.png b/tests_zemu/snapshots/fl-contract_call_long_args/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..25476f9e10849ebf2c5ff8b7b609741ce23675e6 GIT binary patch literal 12845 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 yf1prW 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 delta 6456 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 O4_j-b74gE2l>Y%=(+)ZS diff --git a/tests_zemu/snapshots/fl-swap_with_post_conditions/00000.png b/tests_zemu/snapshots/fl-swap_with_post_conditions/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f5322f422f965cb982540ac29df1128b01ba15 GIT binary patch literal 8955 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-swap_with_post_conditions/00001.png b/tests_zemu/snapshots/fl-swap_with_post_conditions/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec7157ed70991c2f54ca575be7fb2ba956b4654 GIT binary patch literal 16321 zcmeIZcTiL9*Df52AQn(WP^wZCsgHp4CJG2r1PldlQ0R+TL( zg~13GmCp@+NYwIz%==(qZhvbpS+1l3BepJYch-gq0x=*|nOD19S|?FBW|zgc&ZC43 zYBxUlVo)rGG7Ty&a;cjrufRS^{3d*kGPAI44o*4Qe53oW$i=UDV5UbCO9vvAo4uai z+*gbsDI@+sPQ4Kmt1rb+KI?sHy5K+8)#XiLQ4%O)+*XlGW|0eC%82c%X4RBuiZS)r z=3RZo)ej5ij4PBdtfsZ~9^z!e6r5snONZ4uYEb6WG%w`qU<0pph1}H}j$m)@ed1Y= z*o&4(Q(aA?#fql)3-UUwS6;vK+(~eNa3g{7P6z30PQ0ADdbWd-m%K^B)fH~mV^GEH zvcM{=-AQ^;NdpsR0PmaX@Jl9A2~raCfWr)G;hfIz(Uf0M;g$_pWtH*c2AH@X3TNdx zUc(!Go6a%vQzR5;Hp)!Ne5z37YZ3u%RcSGeCo4iZAANIyq3Vbi%3-=@Q3v!bW!TTP zLJkm%E>}JWh?bF`JhvV(+9uw3ElhQ2i>_Uz%;>eOgC1ITpeSto1m}q$S$&XjLwdWb zeEu@Y(xv=UhA^1Ib>-XwXx45d08>EQ*sol|Wv>B;pP74Ou`qD^bJ47x7F~Tbn6452 zWF6gh@k>d^N@>_N%R7UVkryZOzHOkqAx;_<*&fp#rEw*?vokOnBE{K&areuG5w~>Z zLsrn6XN4ln*>$S^wT@zO3dGps8D`MyT4QxWr@J*SYJ@`(49!$vY0X}%6u;R-^Tw+% zQdWFIPp#bmxllDl7fNe#xWUa;S>Z;@seXVho&Sf2aws*v%XfYK^2UQUYcQA?vsopO zN!$LQOzv45@7ahWnftRM@Ao#N~|t7z!#3U^Dsvrhufb16M>5o65nA5y;O5E3Zw9WN^7L=7$z`Oos8pqrs%tTo0k;d4`O9(31K92BizxDi&#jnUOxxCk=DJMgj6 zw!;Pf``$;z=ZBz*^w*3@!8p79b}e7W5P!X#KfqRC*ng3|>mD8Qb9XPaqN7UEh)rB7 zDKe*X^5bH$_Ai4WzZ1o!ZbRNU*Yz>81xXOWO0Ow=y!dBJPH(XxTHx-UMWWee-rl*i z7G@3wDQR?d?K_v^2NiQ2B#CT;;)zCyw8yr3zr3y3y7u=2so?0J&v#V2y(bZOv92u9 zQD})UC{%%AaGDs9-SjLhB7(&eo->2>4IR(I1->Z|?judM1Vaga^v*eW9AU&sWoY1} ze=`qKrq4R?+erqfq@JomLjw6L)%6TIPQs2ot zwrrT}vB5yb=h8tHaYh)naHo+-ihMr7robS{e??V8aVt zVDUdDn~%f2U}Eve0^`2zew<7{9$#FGI(+!cyG(SZ6efk7sT#;|n#tchrpiwINZbf% zVQzhR$6qyfNym?y&-y}g#Nb4PYA)FubGX-K;f|PC3a;RA%XDm-$~?_M<4KfBh`FrO z5Gj2ZvZgrf$a~#m9O5}-sHBXN$R5&D`{OF)jFwA5Rtd*+jP$v66{p|9RZ0qEtj2jg zCM*mh&Jz_c1>WswjH+XY>zbb|nIJFMVOQI}EzFufwvpg)dqr`YA?5YoMtvjdr)152 zpQ+h!R1{5Kq$LUjQ1?|UH(P$ws&cg1*)H2g116_9HNY=yBncuW`VWly5@(Pu;@+{o-J_%$JnT`qvMh%eu~frb>agW2(>}a?~*H2zUUswyJ91&h72>2EQVTaOO2k%}rqpwkJiZV-V z{eTTziE_)igu&9C%Z*IUy^@P`!%o!{Wd6pBB;)k)s(tft{E!+XX0@4NQG)vA{X|=r zeFF-(esvD#aW7fb319YC3nfW5;EdS7VDjEx-IV9j z451OgXuue8uVKpM+}zx({vs%^Tvk7@NsR-=;|Q4Cg&r{jX0O?Uio`J$*rfn3LTwb5 zN6R5=tg*sB$^>c%cuDI`Q4VihY%d8~ZalKs`M$v6d&-Ry!a96?tP-|%d_2|iG5p6e zT($wMX(Z+oYKg10Dz6oi%3;`FB9VLnH^xp_ED4-UUO{ZRGi)r^GpjVjf25CFtZDj)PlK5VMH~x^SA2<^6^nPuUq0arlu@&m(kx>k{-kh_0 z;=t*TPu1&Vwy>3QYUE08lHhf481`6xoXa$|ki6d-54FYtqc~oNzTd4C^pdQb@W?D8 z{^Un>d2>5K9NCB5{>l2fX`whlnf`esU}qy0Vdr--t95OU3Z?QmY%6>}yjaM4*ZdDL zpvg*NhsG@{qF|t^Tz;Iv(!1v(38Ir_r_6Y&J+drhYH~3Ho>Tf~5jo=ecovRI(pRF| zDbW~Sn?V-e{Ke0cSq_a~sD~HCG#9S8ad@}butYzY8L;@2RxS?NQw)1#wz(G1o_ zJ8>JJ1>ijpQ(Xs$;{cfwRyUrXZrO-glS>YH!qhl4_wt8913D0QPRN;3vcmP0Tk##GY|j`z3TDvVl;vrK!1mXLJYT9=$=wvZj!vi%xy89m58IyLxoXZ_{MEd9rOoIQcsIG9&K^=&MTY z3&g{N*KQE{qDrBrx@Y8LRyF!{1jIrQoyZnD$a!;t%eEUiuRFHV-A)P0HYfp(4)+}xsoZ<|P* zC9Xh&R7$>l;1A~B?40c+Oqx)K;3w&}OG!eEkgYFct(Mat5p8&~nCUVuU~JJ(akV;X zH33LZn#9*;6(=%_5|%DEpzdcwhfXXkVMBReC;YN(l`7d!x!52tYI827I=IBanwn;f zr}idsb2oAYe9cVHj9+2P9kCEv>8Kj|Sml7Ys*6FGjy>P<{`9dp3^(<;QSD53mpERRW%AAlVf&TYFnp#6%jAm+x`gX`uqWxi3N7YX->G zxH*39PeMxtWxstYa7=XnW6z zx3dcXoB+rqjRJYmDTSoX66#oVCvoae&6FqJ6IQ}k*4y?JTu9BaK>JR%SODlVOc1Kf zOBU2|$z1CvgiS6^H~*Z=yWJ;67*=s0OJv=tEF-FMGh?BLL0#<@q zNpPS=|D5KPabpl)ZKmEWJh-F&Iq;3OjE? zX;{uXE2mz6dpm~zw2u+w7V_IUAgCU-#5&$=0urO&m2~irr@xdp%kY>Moa47Frl_fvgs5FKG2w2R%Tk!EVZ{&MZ0uoq zLI{I4{-q)BidsE#ROf8@J;U^$m==#K28Ck`Xp@4IDfj)=x`Vc^7F^x%K!AkWo@-6L znm*e8cus4I&Wzb$p=DOr^Vn{+$Yo6}G!TFF60+*Fs+QrhSNu!iXs3_)&Mzlg+uD|* zk$2_E0CMM&8>u?Z`KbXM&Rg!?xs~X%f^sow-ShZeV{#|(W(+@aKzC! z`o84^zmi)dpk$Hyx2QN6Qy2iaMJ!8*NN z4BD-!3+_P%mvAl#I?sWuNGb6Z{q7eN7vgJt-l8`5bx2!h!pT*L_ty3A5 zSb$;RDGRwVyBAorkSK1OSKZCZ2@U!=$3QQ@eWC|2e9o1GReH7l;hyGMfThE#s zJ$#HWexdOrU;x4TNFA+^LbTq}c~eMh;VX!1!O8kMeNr$hkX;+v6~mr)c2l)>t9u`i zqKUUY;umeGRsAg0StdExI$wNG=#Bria<@Y3pO_OE-R^Min|^serw68+e_dU46IWz+x=}aHXxR(D2$Gb%U>y7dMRI{&A*;S zM-6wgw0Ek_Fk7fG95OMN%v&V)k~AsRu)o^LqjoZKfEZ|qTU2OEAio`#Kv~jEA#ySn_q{{89CP{x_}89|q&lf9 z#px(DD5_olcbZE3n>mZ2nK_*yG(_Jl>7cvf)vOe6qEfJFH4qnb&516Ibj z>{TT1P>8IW31p(wwfDq*A7!=VS}p7z)lmI*>9k*=wR@hdA zFS`&!EAxey(T)6w=Nd`%6o3+>G+665^pvdEjJYd{R;Q)lgTY|OcRGX+a}N*SfPjQj z@A2YQrm~se1O4vl5dt|zq6tDz_P=1`ge22YtI-9t2Hmg7*)tM%4kGZDS9yxk*G>F= zNm+YApCgzo*w-em&hJayZ;C}DgbWI6&sSes8!af*#Sm*Dq29P!@g{guWw%0ZQTyAG zq$lAI401mAwy>TeJ{JlSN-YhwD;4^7;`S(UiJf`EF^eeu5(s-PHFFmhv0n(KyGgAR z>x91#xxFzDx0ruwv7;>41OcZ^Mp6?Pv22gb%qNbrtruOtkX+7L%L_S|J{vUyeQ96~ z-oDuSR{6=5x?jy$>+a$1a6F19v;X6#mIGm(H#{11uF9LAFH_aa_ z8|=iyJnAqUN`hLtpgWuw#2_=ahNsq&w$ zg_!9xrzb9uRE4+E-};TA^4O6j<3+)d36T3fSoUP7dO|4vAH4I9LxB;mL5gXOVUq z(h`|d_aF0K!NhZW4iD#>f(tEe*P`pd;FgvaC=^Oj-sNjbl#koQaUx)_zc_^8iO8B{ z??O7lUDTGR-DOQfmE;JoK6)!=1G(gG)t{egd-qO8polUxtiN^Y5+zL5EhsdUi#yMC z%e&c0=`%pMgl}-=cX%Y2WE8m=v4z-W7Ez9lz6?DY8>$wsJjMZAbfAsXR{tyu(?yC* zH{KK4sjH>3&jo(&p)zxA;=Av9V5`8}sleTxz5tFAZtLcwiSGw#ztTb;$+sOSuRUen zc&$9U{9D5Eb%2blZLo)3Ah5p%TeeKn@_xE9Lgl%CGr47IrADP%d^noDSXaF(>1GBd zQz$N}XwsyU-mpTMDS9X7=;+9AJ@a02;)1xncP$L&G7+qp{ab161-XWNz~xR|uRAEI zX$+B={$q7Kkr~wa=IZ$hkM)6yuzRZ6KWHtEsUI?ro(Giu8a)0rug3GC^{b_HHb7?u zD^1<66Fvt|&>!kKsOyRU655v92uZ!lvCq6xE!JNwr;}J^ZMWeqQqKDu$P=Z_M(ZB2 zRBB>n1DtSeoVkx*(umXf`8ZVB37yRRtY%4Bkn+e}K0b!_`&AGu*jf80diPaw(NLom zHTiDi6tWvL@^0}#Sewb6Qd3m5Oq8`)euZ0b`M`RGLWD;_K)`Y7c0(B(2Dz|(98GZvC!JelEtj;Q5AofCt2re|a|DzC} z3|WO9et0)D;L+*=#r&trBpm) z4`fwhc7ddox5MAmAv`RsN4H8we@f2Tn;YFGNxHrPIh~qh36PD&Mj=)&R{Z5I1pu^< z_FuK+qk-I43xWea>6@E$dBLLUS=AIcbb;Bh0%}8gy0+JRLgwlF>Z11A%8~?E-M%&V=z5k*=s^|R(6?o#ImOa0hT}t-_rpjzW?iJS z2OqoU1OS#?9A4ZJB@H`JK7AV3!sLucWykdb@T_Nm)Az4Q@7%8(k6G|(I0zHR2cMA1 zBRG(6LdpvHf-K?sI;DIikTc5MSvs|zf;{7M{Q7BRKzXJP+iN=6@uRY$iPp^kM> z8h+M80ZHPtorml1fr{XJs!8Nf)-};Q5*%jYUz;*%@!$ogrcuy9<(!Kn zQ^>kGy1+r%kSH?(U%AB3A)GTKQf!- zVP?$Te!hXI(+t2$5nbIwGgxsfZ6Sm>+nZ ze`Kkh+v?M}039c2_L7yM1}IYNzg6HI)}`AkjlhQi@U*ih$>$?DzKbtTT@1@t0>xa2W-~K9 zc3O{B0d%Ex=omu(Ou3AC+-a}D<$PrU3 zOID!^C!w5YXr))&`+~TeK3;wds2BR)hUFT~mB(Zshx5(4oax;8&RXL$0CRFNV>5>f zS~d0fe91u-o8Yz9XsZi-*Vp&3ePi6?wb!w1yjX6xG?b?2gBcnZ4kMECrlq;*y`BZE z>K!9Ch2@07Ng-!9#fNVE9|KyDvlBFJV*+&Jq+1A;JGDDm-CFOm(Z@{y05xT(Wyw48 z!n+&#{2U+I-kJFB#idv*0t{C1gy98V=lU0^J|2uz1hrLqQR=B5h&kTf5izp~W%r$I zR(m7CmStPs@|nyE)D&b#A0_@8euDG&06X-g?Gi(q_6jNp0~ya99Nv3s4>o8Nh@lkj zvG_z$UGtYz-heODtB1T)TItyG$h_5_sjIDDrN@o*)u2e0%0f;`rQ3e{dGrbNt01(; z-DQ)q#2q22_~0CT+*q1JQmX<{;8ogwWaI#8a?+3GU8Ptq!@Y$@J*^BWm&}~-AclPK zPt}7jPfmB)fB#qTW`O!Z|u#3J1O`Eg-$To17V5m^gZxm z-9o9{%5#8>8eI`zQ2IU(clH0sO}2n|4M8Nu+G579ax6=R+=XO&Kqq?7Ip;PI42zS- z(vQO<;?K<&x!7+j*9@JbU%E?E-gLB<%TvoO)kJM9RCzcgQ(dnpo98fB0~b+G6)jJ8 zH-iL8tecpA%75gEUW|z|ICNVj68nd}xPh%ZFb^!;AJK2BSB5hN^@q~Km_)KujH?B@ zN3;CK_yqNb2GUThHDK?X5hIl;VE!l7wEvsLv7^plJ58VOo z=gsnS8u3s7SozRXgI+dG^|?kH(O831#8MS=zL7`7vJk0Y_FG})hnGt0#(f1gtp^hX zdzXB^?p?oDGwmGUp=q>|?`(|&O46FjkfFwtPcQK%)r}S9^usK4$2iK#iD$SEg-O=QgL3Fv!_!K2WX#3zg;x`v^_nmy4Hw917RrCW9|f_Yf_TI~AI| zD(J!W#klmi9Ze&1GWmiVqr9?Ip4aK#VM@zq2bb}qy8uod(Wdw`^yKH;OwIBl2hK&kk?W6knYFD}`@1j}CpavGz zVxln`5rqv(FCH~cj}6N%25%^+!rW8JB38;GH!MfFe^!yX-ibwJ;X_G)%l$h8L3;;` z;RVRlJg@vO&bn`{ZAgUd}FL};GxaT^Mnyh z)Ol*`!suyf;o%&!Gi65MOxSGgnah}LL)u(9U|q(3gRe1Fwm#%qPnOT%*6!`#jIONY zn5TrLvM@w((w#rsC!hqo)_5`ui@gBbpB3igZW>T2}Vd4wA7F*CVK7U+}(* zr2u%extH=*l{jUz5(joLOrHCZQ#%p8>X*-YX}H;+vO-Wot@^lgWNN3=?}^11Ia_!2qkQwx=gxg z!pmDVmpc8T6F7a72F%?U+&vl-N1~KTo87spX~d0Gq#-l{xmg@zykfS0lge>okxLx1 zK;p@M%Ui3~zbYm-=v_T?UXT`~iM~8sNv+(_|zJQCqZiaP>SbLjG;^0 z)nWz0irmc0fK-P!Ub}FZ5(Z$7E%Du*LxTNZ8Gz)eXWuY(2lNltE`)VCxZ(;XS$)b6 zq7;)q<$1f5Sx0!Ag3yX=WBdQdgIjiq@9O{pwP^IR4PI&-`o* z$+9AxH!X1C%>J0|;Box@$(@mmcSYm(rOr5I493O9K~k53JzJmd-dbJqXSe(#GlEw0 zuY3eb2i!i7X2OOsAhuE}(EsgU^!1Qwav(9t>A_`^Hi^|5G8c5-WFs|;O*5fPFhS2D z5FbI)js&LilZ?JU0Z}am7bCdsJ>$KwSB|9LSS$*S@)~Ri8?jz^ z2%$SJ^U9=L9PhqW0%={n>l+GESE-{fPmakKMoAri-wIN0L>jG0t6f5BHA8X&I6)iu z4w~|l@|Be^EjjaCH(nM4-miY{DOF6)-4D;aRJ(s+)N7n4Fu?jQ%f{~l)MnS#&rEBCZzZeW z5k9ti%mE5}!;0Cs`%y2@zCmO z{zJq2p|}qY$kw;l)iPZ#f*uF=0s6w38)YKQpve3GE$sdOq(CJ1=-8pElcgUE=~VX& zzXok_@?ODA5Chs~5T`jstE+zeMKtQ=wp~Uz^2CItlcH#0U-c1n-wTo|>U9-F?>rLe znYp~M07%;?$i3fVfd96a0hMuLfIM6(8}OQ*hzWA^$5p`E%kOB^BeCa!jNPH(Af%

DPZcR*X`%h@mh$e9OFJ%BnT*pXFY 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-swap_with_post_conditions/00002.png b/tests_zemu/snapshots/fl-swap_with_post_conditions/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..8952e882f41466d61140952a34306305bd3b2986 GIT binary patch literal 17009 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 z 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 AAOHXW literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-swap_with_post_conditions/00005.png b/tests_zemu/snapshots/fl-swap_with_post_conditions/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..f430e4600002a8afcfe3f4da11520b99711db518 GIT binary patch literal 18229 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 z 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-swap_with_post_conditions/00007.png b/tests_zemu/snapshots/fl-swap_with_post_conditions/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..482530ebfd0eb3a22310c8a4e541eea2eec207be GIT binary patch literal 18592 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 P5D2Vg@UU9r$v^)K{aXb0 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-swap_with_post_conditions/00008.png b/tests_zemu/snapshots/fl-swap_with_post_conditions/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd19bacfb472a5069b6cf1e0b98e212bb9953dc GIT binary patch literal 7223 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/fl-swap_with_post_conditions/00010.png b/tests_zemu/snapshots/fl-swap_with_post_conditions/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..25476f9e10849ebf2c5ff8b7b609741ce23675e6 GIT binary patch literal 12845 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00001.png b/tests_zemu/snapshots/s-contract_call_long_args/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..033f3e4baa530e7fd4b8031b0583ea46add99873 GIT binary patch literal 412 zcmV;N0b~A&P)6CHD%3qO4aHgcd`PWpUni;Aq#pH0eLXLQj$%(h_vi;iA7Z%q z(+f zipB1Fb^`k^ptP=E@^}TAG@)lo000000000000000!}0?uO5w9gzY5&|0000qjv*Cu-d;b=*PVlm^f42F3RBtRYlf(MKAIr|EY)93U*1#vxH{an^LB{Ts5vQ1#9 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00003.png b/tests_zemu/snapshots/s-contract_call_long_args/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..5c15e9f9e2264184d4ad4af52d423d98c986fcb2 GIT binary patch literal 309 zcmV-50m}Y~P)Gk|Q5c&vUpTU;o8j+@Hai$F#m3 zm1#j%ET^{D#`3;t3i1Mdwshq_NY2!1P7c4c<^xNmw|3h#AiwpGrk!L7$u%Gn^hWv` zU@Crq|4fX1`;dApna+Ai<^+$c+gUle$)K&ap`9r7rM8#=hV(4}9!CD1#sAlEC)d#G z-tmQf@WM5quZ_wJJD@LgKx1@3V{`znVH*kn000000N|7_{g|O6PDUf400000NkvXX Hu0mjfC-9BM literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00004.png b/tests_zemu/snapshots/s-contract_call_long_args/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..14870b0c26af5c0be078b9108825b2eade368cfd GIT binary patch literal 461 zcmV;;0W$uHP)lOH-QLzS8Y(Z;{kZmQrbMI|_j$SHYD-Ww3JVqL!vJhTA6Kh;_aK;%k+z^+K{K zP|A1PV3Zd&Sr_@J?;(6%H}e-T2-_1L7*B9hV3f>*mMQLU(KUU5!_+vfT06MecmZzp zlq$Evz|8q@QSju{^z6uCdr@rr0%9k?qy%PEv0G#{@NBqEQjyW(g&JG6TP0VEF^=Q> zH=A4~AugjpO_v-DnHS@0zX;S=Rk+DjoRKs-;D7S{S?qF^1etpG>`6Io4v5tDDIF6& z2b@fI8p@mmTqhCyku=nC9OqzK<^Vl|;whQ(;>~AVL>@Oq3BPv@Os^5yCoJnbi}-3x zodN4mPeV_peId3GJ*)IQWTm(?AOtPw0R1^QK08ctU;HZ(X;E)l&1w!9Fa-2j^sM=I zsX1WcxJ+ZsG_)oZ8w|*cq*KY96*uJ+_*upIEa-z500000NkvXXu0mjf D%$3lp literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00005.png b/tests_zemu/snapshots/s-contract_call_long_args/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9660ff01d5603d4df28d1d597a28332ff4e94c GIT binary patch literal 429 zcmV;e0aE^nP)=13_znp?|)zyc40+60iuRPY~FOyLGmd95;Fw|Sr=eoU5<|tQdT9ZI*>vg!A!~@WL zSE@G&5^+CSEC!725CBjJK#w=cAsSf)I0A5?%}|+1yw*!ewc?meJLI`g+V}m$pNeV{ zZdRp=+N7A;Qy4+(Xfbiacpc+s0@*8w7rT-48UF-WH&hu5fHD>UWyTM{&A*}=hM~z9 Xh363G9{KR@00000NkvXXu0mjfAlbHy literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00006.png b/tests_zemu/snapshots/s-contract_call_long_args/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..b2091a00109f4bd71112afe13e39d3e11a599bbf GIT binary patch literal 368 zcmV-$0gwKPP)$|558{h#k28}V4&tfj}S-hVXic)=%HlnggI6aHM zFZ;9FSw}t4p_b#CE`s(?I^E8pNHCC76Ix?qU=e1y?x@g9O~aO2j_a)P^uWRe)GBj} zJk74-jEO=_NqSQrlM{Z_4b$B-ZZj#~gJGQ>5NDo}{@3ySJb4rR>$x`$QItEcxl!;I z-q-l(TmRBkC6C9ZtJ0nKDd_V8JcPqA@~5FVN>>J!Y}o;K@bvo?;K5YS zfcUDF6#uWF!kv3o)ekY80iDr+&a@ja(EYZRa06a2`=;A~cg(&G@EK~wKN$E71poj5 d0001R(+>FsbCTRako5on002ovPDHLkV1lV0cf$Yx literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00008.png b/tests_zemu/snapshots/s-contract_call_long_args/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e5c5d4f8c9e69d107cc1e1026a673bdf26e524 GIT binary patch literal 695 zcmV;o0!aOdP)qNtqH3`c@~ z!uw?C$%!hP6%T859KL1k2X%YSQ$nheq-VZBUu?#~(?4@^gR-OFAA;_tb5?Pe%agx)=b&>wX+}@;)7h zaKhcH5I>W9M9BKnzik_S<}h=cNX*|UZX$M{J`ao zwfU-uf}z+1NGX(8rK|i>DA1F%u08$49;>eY*0<@>!9zjB;{myYJ8w{T#v=!dSydkB zW^L}_;c^T_JSiln^=?&{d4oGPJcNV#wVi%=x8`@Pij-j0w~Sm#Tys=TDadPi?Evs9 zhP9F98+?or!{l3?;EG`dGK0!lctfrGL^{!cSArVyI$d9j7f0M_3-ED2dBLk<&KO|A z+4rc$Lq$Q(R{)r<|x>Gr}KYO$n0L#?8Z5|9Bd@43PxK#j5t^C5@^ngO#HQ-Yrxm zSLfCLszffjBl$CN$JI&AHLD+0Wyx#+8e&Z>M>jyqjcala+K$$R dGqGY2zz4LoFs;cGZae@0002ovPDHLkV1gs3N09&k literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00009.png b/tests_zemu/snapshots/s-contract_call_long_args/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..86c174ca820d3a4d908b0f917bbd36745a53f811 GIT binary patch literal 385 zcmV-{0e=38P)(1k*dotBL(bL>PEnWUHdrtq5S$ksdM zN@zQLPQ@&KhS7N@g;GIpt;hdZ?vl2D_rs~k_mOSNvRU`eO#IS*YjH&VBF{Ofv_yDq zKQKNeuz_RuO{wbm;fmzy`WiJDef^50%eO%fEXQ8BQ~Fb8cAqW-P(K?el*RpVcAu^! z?6DSwifcrc%w_y3>-IgvBr|51q-(zP-F~j`(ki2HcSg&33QWt=b8vaoB9W$8HA%!< zWe=nt@f69V$Z#M1NT6IO%6FqgB|TWvD(x{?5Ld&b0it-TTPQV;)M(!$3_U-dg z2s&?*l4w5-8OH+(kiKFs*%~&$9GSrOL5%&tVr6LbpMmF56=csX24n(XF%N7200000 f000000FdAVZo11`!WV4800000NkvXXu0mjfZjY=J literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00010.png b/tests_zemu/snapshots/s-contract_call_long_args/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..ead445f50676390ce9b10f1316cafae6d43025af GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fsgs^Ajv*Cu-rhLP*JL2j`f#P@ z`~L@Y3L39n>K4krWc;H(@$i91U;GSC=dO-Du+2`-@qJLHn%u&hi;`FUSk;#5G|TwY zk?Ip6oZdH2Z(8f|?M(ZeS;kAJ6+LU5eKgMXxN)>ec3NW4|^F;s4z4$wG&i8+KP)L36~1!s(Yr>X(`Z+BtT+}&oY|_u*}~VASqRtifh2MXs>GA zTJ3a!ni71)t4P;kr|>DmTH#nV?{s2%ip1&k1;-k}jrz$OjZxPGi35+)1q!B7x-eLm zkv=Y+T@{aM(O%WCeU$s@U9c0Vr%QzIkGr2?%}9HOefx_7ecWnD0`EbJ7EskXW%{eGl?PIlt=Kg+Y^@Eztoh zjMOYi?T{YQs!fGOwu_4)Bv^FxzzjqZrc zg{<#wfOr;U-hOzqldxy>_>OMRMG|N^3hO$uJ*7FSY(>tdu@>u+LXm$b;ctDPhk}kl zJ?o8}H$>WT4{5fjz6wc${2+hkg^3@>IRd}>XE`(ylte0J- z0J<>)n>zyvC38?*l0-6r@yNt#-es%38~D5a&=f!u14euWQ%-ELboBQQW^)`oh{1U2 zq*G6jjEa?UwdE1xqAy4p2yTB(iiwCjg{JhrO{JJ8NW0-B9F(u`>cgvbf9pl0f@U#M zBS}*olTtHk<-7g{@F<3*(cv2$#)xA2t3ilf9zZ29DTOu6xKCscI%tKU4!-3Bd5s< z-nen&Mi-n`gzhEiXB_hM6sPerHt&C{X2T=Z8!#8a4GCb7rc&kzLa?a-==BsIY4!#p zvne4#|Kt6Nu8G&jmhne2t%&h-ZEC_-)2i221~6IkL!(^lL@0gw_V&maNzVE{gV@rc9=j)=PG-Jh1Wl__SpXeLqUO%wo1ZD zPC&fe=^X2mej41n1UfoWYiEF^UtiIXbA4Qz34E-F7IfeONNTIwcMj`wZ9Vmn9+H~e z5p4!#L1*+fRTP4Ea?RvyfUTUo7^99|9*|>$&4a#ak--mQI<%~ zA0%ZLk_I+8k+OJWR!*5UNuscu?5mN?$f7qY$r29LSr9!0;ni|D;Fj^vlEle2s@!Em zL)OSlPE%qgFS?SqYtjfL>&kYyv|nuDfH;T3g&kUpwN16eLFmx_2M^t#{p zLB`H@D8hX5pe-i&Ak+4r7tA&^#7*D;$HfW>mg>en8|*&_b2z|`$A#%R96*T*mW4N3 jKP#jZuooK}8_n-2TG^O&x%wzu;V_X{*qqt(-|JpmueRI z&2fI^;qm=t+ghimXMFuWs4g~1m)#-na#|%uc5Hv|yZu{ovDCJnpQl#LKlwLaqhVrQQFhNk>mL>MoD-81%Nt4$ z>)P>G-A+7sHr~JYfpLPdS%UFqUWb2Wn+~Nh?>Vz?Moz=xo8q_EFT7OyqvVQ&5)Ay> Z%--IXov&2RxD)7A22WQ%mvv4FO#oZ9cIE&8 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00015.png b/tests_zemu/snapshots/s-contract_call_long_args/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..5ffe03626c35d513ada7a454dd7e65884c5040ac GIT binary patch literal 332 zcmV-S0ki&zP)@23`D`w`ybeav%rbrGbma}!}KdxsMw?vK#b9Bs~LlB-7hq9k^tr21AHL9y!mLg zO9M4m(2AW%X|YQfZrD)>PP3;IJY@vYsRhT4GXEft>#J=xCg}+hH{uu+3K}Zf)7})< zG8A^n<%dgl*aQmjrB25Ua1S!%?SUdn6x&Kk0m(&Jh7sSD#$H_Mn4n}ktl;VV5kdwA zW(_#q#ytGt>S&t;&Fxtpb$OW2A9)AKP<_mB{jFpVzd9-UL}g$M&^(Vz?23@|sU48J zpxU89Iwr!afcRId(kC#0tN_#Vxkw>+6;QfDCVk3uqOCA}5rH7%RQ7y#4&`R{&z2hCnE=p?iqb zHo22hJ&xH50EI1JnS;dpjasAnkxkN5M_W(LBl2;%x;&2qAIF8>~K zzhRaAS`H?-=QM1i=Tu6{1-oD!M<5AJP1 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-contract_call_long_args/00018.png b/tests_zemu/snapshots/s-contract_call_long_args/00018.png new file mode 100644 index 0000000000000000000000000000000000000000..fe668c89ac31671418758bb5384eb8629e0d39bf GIT binary patch literal 452 zcmV;#0XzPQP)j`#CA+SY?0?js`ZvC_eo0Hu9F(I*C;&h&5t?MiHQu9ofT~hQoEyKArBGeS7}N zk>Hwg1vHW=$bUoM2RYB|o1q<9`6P(UV0!WICL93~{~FDib4*7^GxbC1&V*|Kd)7!z z{?!!1tdp`Zn8{r~sEf8!z!8WUpev!;2HiNC3MY~*!e+lQox6*fE~v9Xss9o!PFk*b zhlkke4_N7MC}(wzv$0NPnCHR-7-gc&D!U@)D#9;k!16TmAFGk^%8+6JP% znhIYe8HCMzquX}_+W@|l!Ujx~d@tu7$GhP4y002ovPDHLkV1mb_&?Nu> delta 429 zcmV;e0aE_S1IGi9B!7-cL_t(|ob8#*j>8}fMQJtt{}0Y0U1Ve-zpzP4pV>D>yQcY*AiW2Z zgWsF*35e`3tIyoVbaYf*e<|IGa15ZGWvNL|RUyJO3Pcydvq!Wx4T*USY!j-6gVc)vdS4U=~Z!~n^m zr$|zsyaypO6Mt|9P5qY3f+G7mTNM~)kWOYboU1~KB9jHNYJvQpJuxJZ70I11QsZHw*=k4$000000OGs> X@S6oirT?f!00000NkvXXu0mjf_Ql9D diff --git a/tests_zemu/snapshots/s-mainmenu/00010.png b/tests_zemu/snapshots/s-mainmenu/00010.png index 222e09f806c2f083f0f451e0d56298273d140a8e..0f3fa1e0f073152512e6fa175ff1c293adcbdd3b 100644 GIT binary patch delta 431 zcmV;g0Z{(O1IYuBB!7@eL_t(|ob8$24#F@9g{RT?f8brriy1e4_N7MC}(wzv$0NPnCHR-7-gc&D!U@)D#9;k!16TmAFGk^%8+6JP% znhIYe8HCMzquX}_+W@|l!Ujx~d@tu7$GhP4y002ovPDHLkV1mb_&?Nu> delta 429 zcmV;e0aE_S1IGi9B!7-cL_t(|ob8#*j>8}fMQJtt{}0Y0U1Ve-zpzP4pV>D>yQcY*AiW2Z zgWsF*35e`3tIyoVbaYf*e<|IGa15ZGWvNL|RUyJO3Pcydvq!Wx4T*USY!j-6gVc)vdS4U=~Z!~n^m zr$|zsyaypO6Mt|9P5qY3f+G7mTNM~)kWOYboU1~KB9jHNYJvQpJuxJZ70I11QsZHw*=k4$000000OGs> X@S6oirT?f!00000NkvXXu0mjf_Ql9D diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00000.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..3eca54f84e9c8e3676541f153310b9dfb1ef6159 GIT binary patch literal 597 zcmV-b0;>IqP)_o) z$!7*0V%AJ!C9GYk=4j?ZZzXp?4}9JfjR6vfs)bQ)wRi;@h`WgOKHpp9FML(z4&h}d z5Li>nfsN%UH=GCnV069K#70pyOsXJ*WYN(~G64chpi@wz@A_>ZEZJi5!k0p=z~_*0 z;T5{Pmd_AKq@ZdmfkA4O28fFE3RH?xvMZHes_`gSaXFIVh{wK>&c}|y#sJV%giM9S zy3HEG^vS9h`6(FC11>_s`mPDSOJ`Fc<FX(S_!X=nJDUo2CG zs?~a$%&;mVsxbA);i!o0{~(zHoTFml%6PJIy^1j6gN)4D;J+kyRCokX%F=)$qygtE zCQh^*Iso#j(g;30As$f~p#?U?q%&apQw^-&Kw j*}2F}gwstM8~+VIXl18$@`orE00000NkvXXu0mjf=d2fG literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00001.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..033f3e4baa530e7fd4b8031b0583ea46add99873 GIT binary patch literal 412 zcmV;N0b~A&P)6CHD%3qO4aHgcd`PWpUni;Aq#pH0eLXLQj$%(h_vi;iA7Z%q z(+f zipB1Fb^`k^ptP=E@^}TAG@)lo000000000000000!}0?uO5w9gzY5&|0000qjv*Cu-d;b=*PVlm^f42F3RBtRYlf(MKAIr|EY)93U*1#vxH{an^LB{Ts5vQ1#9 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00003.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..5c15e9f9e2264184d4ad4af52d423d98c986fcb2 GIT binary patch literal 309 zcmV-50m}Y~P)Gk|Q5c&vUpTU;o8j+@Hai$F#m3 zm1#j%ET^{D#`3;t3i1Mdwshq_NY2!1P7c4c<^xNmw|3h#AiwpGrk!L7$u%Gn^hWv` zU@Crq|4fX1`;dApna+Ai<^+$c+gUle$)K&ap`9r7rM8#=hV(4}9!CD1#sAlEC)d#G z-tmQf@WM5quZ_wJJD@LgKx1@3V{`znVH*kn000000N|7_{g|O6PDUf400000NkvXX Hu0mjfC-9BM literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00004.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..14870b0c26af5c0be078b9108825b2eade368cfd GIT binary patch literal 461 zcmV;;0W$uHP)lOH-QLzS8Y(Z;{kZmQrbMI|_j$SHYD-Ww3JVqL!vJhTA6Kh;_aK;%k+z^+K{K zP|A1PV3Zd&Sr_@J?;(6%H}e-T2-_1L7*B9hV3f>*mMQLU(KUU5!_+vfT06MecmZzp zlq$Evz|8q@QSju{^z6uCdr@rr0%9k?qy%PEv0G#{@NBqEQjyW(g&JG6TP0VEF^=Q> zH=A4~AugjpO_v-DnHS@0zX;S=Rk+DjoRKs-;D7S{S?qF^1etpG>`6Io4v5tDDIF6& z2b@fI8p@mmTqhCyku=nC9OqzK<^Vl|;whQ(;>~AVL>@Oq3BPv@Os^5yCoJnbi}-3x zodN4mPeV_peId3GJ*)IQWTm(?AOtPw0R1^QK08ctU;HZ(X;E)l&1w!9Fa-2j^sM=I zsX1WcxJ+ZsG_)oZ8w|*cq*KY96*uJ+_*upIEa-z500000NkvXXu0mjf D%$3lp literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00005.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..1a9660ff01d5603d4df28d1d597a28332ff4e94c GIT binary patch literal 429 zcmV;e0aE^nP)=13_znp?|)zyc40+60iuRPY~FOyLGmd95;Fw|Sr=eoU5<|tQdT9ZI*>vg!A!~@WL zSE@G&5^+CSEC!725CBjJK#w=cAsSf)I0A5?%}|+1yw*!ewc?meJLI`g+V}m$pNeV{ zZdRp=+N7A;Qy4+(Xfbiacpc+s0@*8w7rT-48UF-WH&hu5fHD>UWyTM{&A*}=hM~z9 Xh363G9{KR@00000NkvXXu0mjfAlbHy literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00006.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..b2091a00109f4bd71112afe13e39d3e11a599bbf GIT binary patch literal 368 zcmV-$0gwKPP)$|558{h#k28}V4&tfj}S-hVXic)=%HlnggI6aHM zFZ;9FSw}t4p_b#CE`s(?I^E8pNHCC76Ix?qU=e1y?x@g9O~aO2j_a)P^uWRe)GBj} zJk74-jEO=_NqSQrlM{Z_4b$B-ZZj#~gJGQ>5NDo}{@3ySJb4rR>$x`$QItEcxl!;I z-q-l(TmRBkC6C9ZtJ0nKDd_V8JcPqA@~5FVN>>J!Y}o;K@bvo?;K5YS zfcUDF6#uWF!kv3o)ekY80iDr+&a@ja(EYZRa06a2`=;A~cg(&G@EK~wKN$E71poj5 d0001R(+>FsbCTRako5on002ovPDHLkV1lV0cf$Yx literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00008.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e5c5d4f8c9e69d107cc1e1026a673bdf26e524 GIT binary patch literal 695 zcmV;o0!aOdP)qNtqH3`c@~ z!uw?C$%!hP6%T859KL1k2X%YSQ$nheq-VZBUu?#~(?4@^gR-OFAA;_tb5?Pe%agx)=b&>wX+}@;)7h zaKhcH5I>W9M9BKnzik_S<}h=cNX*|UZX$M{J`ao zwfU-uf}z+1NGX(8rK|i>DA1F%u08$49;>eY*0<@>!9zjB;{myYJ8w{T#v=!dSydkB zW^L}_;c^T_JSiln^=?&{d4oGPJcNV#wVi%=x8`@Pij-j0w~Sm#Tys=TDadPi?Evs9 zhP9F98+?or!{l3?;EG`dGK0!lctfrGL^{!cSArVyI$d9j7f0M_3-ED2dBLk<&KO|A z+4rc$Lq$Q(R{)r<|x>Gr}KYO$n0L#?8Z5|9Bd@43PxK#j5t^C5@^ngO#HQ-Yrxm zSLfCLszffjBl$CN$JI&AHLD+0Wyx#+8e&Z>M>jyqjcala+K$$R dGqGY2zz4LoFs;cGZae@0002ovPDHLkV1gs3N09&k literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00009.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..86c174ca820d3a4d908b0f917bbd36745a53f811 GIT binary patch literal 385 zcmV-{0e=38P)(1k*dotBL(bL>PEnWUHdrtq5S$ksdM zN@zQLPQ@&KhS7N@g;GIpt;hdZ?vl2D_rs~k_mOSNvRU`eO#IS*YjH&VBF{Ofv_yDq zKQKNeuz_RuO{wbm;fmzy`WiJDef^50%eO%fEXQ8BQ~Fb8cAqW-P(K?el*RpVcAu^! z?6DSwifcrc%w_y3>-IgvBr|51q-(zP-F~j`(ki2HcSg&33QWt=b8vaoB9W$8HA%!< zWe=nt@f69V$Z#M1NT6IO%6FqgB|TWvD(x{?5Ld&b0it-TTPQV;)M(!$3_U-dg z2s&?*l4w5-8OH+(kiKFs*%~&$9GSrOL5%&tVr6LbpMmF56=csX24n(XF%N7200000 f000000FdAVZo11`!WV4800000NkvXXu0mjfZjY=J literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00010.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..ead445f50676390ce9b10f1316cafae6d43025af GIT binary patch literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fsgs^Ajv*Cu-rhLP*JL2j`f#P@ z`~L@Y3L39n>K4krWc;H(@$i91U;GSC=dO-Du+2`-@qJLHn%u&hi;`FUSk;#5G|TwY zk?Ip6oZdH2Z(8f|?M(ZeS;kAJ6+LU5eKgMXxN)>ec3NW4|^F;s4z4$wG&i8+KP)L36~1!s(Yr>X(`Z+BtT+}&oY|_u*}~VASqRtifh2MXs>GA zTJ3a!ni71)t4P;kr|>DmTH#nV?{s2%ip1&k1;-k}jrz$OjZxPGi35+)1q!B7x-eLm zkv=Y+T@{aM(O%WCeU$s@U9c0Vr%QzIkGr2?%}9HOefx_7ecWnD0`EbJ7EskXW%{eGl?PIlt=Kg+Y^@Eztoh zjMOYi?T{YQs!fGOwu_4)Bv^FxzzjqZrc zg{<#wfOr;U-hOzqldxy>_>OMRMG|N^3hO$uJ*7FSY(>tdu@>u+LXm$b;ctDPhk}kl zJ?o8}H$>WT4{5fjz6wc${2+hkg^3@>IRd}>XE`(ylte0J- z0J<>)n>zyvC38?*l0-6r@yNt#-es%38~D5a&=f!u14euWQ%-ELboBQQW^)`oh{1U2 zq*G6jjEa?UwdE1xqAy4p2yTB(iiwCjg{JhrO{JJ8NW0-B9F(u`>cgvbf9pl0f@U#M zBS}*olTtHk<-7g{@F<3*(cv2$#)xA2t3ilf9zZ29DTOu6xKCscI%tKU4!-3Bd5s< z-nen&Mi-n`gzhEiXB_hM6sPerHt&C{X2T=Z8!#8a4GCb7rc&kzLa?a-==BsIY4!#p zvne4#|Kt6Nu8G&jmhne2t%&h-ZEC_-)2i221~6IkL!(^lL@0gw_V&maNzVE{gV@rc9=j)=PG-Jh1Wl__SpXeLqUO%wo1ZD zPC&fe=^X2mej41n1UfoWYiEF^UtiIXbA4Qz34E-F7IfeONNTIwcMj`wZ9Vmn9+H~e z5p4!#L1*+fRTP4Ea?RvyfUTUo7^99|9*|>$&4a#ak--mQI<%~ zA0%ZLk_I+8k+OJWR!*5UNuscu?5mN?$f7qY$r29LSr9!0;ni|D;Fj^vlEle2s@!Em zL)OSlPE%qgFS?SqYtjfL>&kYyv|nuDfH;T3g&kUpwN16eLFmx_2M^t#{p zLB`H@D8hX5pe-i&Ak+4r7tA&^#7*D;$HfW>mg>en8|*&_b2z|`$A#%R96*T*mW4N3 jKP#jZuooK}8_n-2TG^O&x%wzu;V_X{*qqt(-|JpmueRI z&2fI^;qm=t+ghimXMFuWs4g~1m)#-na#|%uc5Hv|yZu{ovDCJnpQl#LKlwLaqhVrQQFhNk>mL>MoD-81%Nt4$ z>)P>G-A+7sHr~JYfpLPdS%UFqUWb2Wn+~Nh?>Vz?Moz=xo8q_EFT7OyqvVQ&5)Ay> Z%--IXov&2RxD)7A22WQ%mvv4FO#oZ9cIE&8 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00015.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..5ffe03626c35d513ada7a454dd7e65884c5040ac GIT binary patch literal 332 zcmV-S0ki&zP)@23`D`w`ybeav%rbrGbma}!}KdxsMw?vK#b9Bs~LlB-7hq9k^tr21AHL9y!mLg zO9M4m(2AW%X|YQfZrD)>PP3;IJY@vYsRhT4GXEft>#J=xCg}+hH{uu+3K}Zf)7})< zG8A^n<%dgl*aQmjrB25Ua1S!%?SUdn6x&Kk0m(&Jh7sSD#$H_Mn4n}ktl;VV5kdwA zW(_#q#ytGt>S&t;&Fxtpb$OW2A9)AKP<_mB{jFpVzd9-UL}g$M&^(Vz?23@|sU48J zpxU89Iwr!afcRId(kC#0tN_#Vxkw>+6;QfDCVk3uqOCA}5rH7%RQ7y#4&`R{&z2hCnE=p?iqb zHo22hJ&xH50EI1JnS;dpjasAnkxkN5M_W(LBl2;%x;&2qA=Si0dst0#jpNJmUjnfAU zH(H;r6L8|QZzm2O4Kg{%^`6jC^N%XJAKzo)Ml>6`^Kehg4ZBbBGdPWyjlq?ce;b>5 zM|L+=EL4j!BfE`~DxxB&m;fo2@>X*o>7`JhCutSqd5JBS&i>gM4j-Oaf2u{?{Ywt+ zI6>u%Ckhs^syxumV(#JLQcOfVC?uuzY^sR7a|B=jzJ!DNwY}Uhx8`T9jC8`vZv`cj zxZ6=Fr68}OwH?5-7}iFnZ*UkR85B%u6x0yc+wuO%#i`)a zeDa)^A}*M)g?syes(u)og5C7eOgs~|1A;-3&wAHgUV%(CK|Gbo%pM<+;Tg%N-}Va& z3kwp)C_>H>)USqb9m_N3Ry^3%*iTHGkc;IADPGJD^F}0rRZi*6y|$i~g6D@mb5+ zNU9OtXO^%7ta7+hgR(K6i*f$B9Qd=N7!NbWYiJ>2@o!_Xy&1UODs+0ILD zDw772qX=Ftq=Kun_5V~LSJjccENInGa{wO6RzBdW$k=gpQe(}kM^#xe8i0ma6U)#I nkaFXij6vJ0bzvly4+8iDVFXB#5u30D00000NkvXXu0mjfL)=9K literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00018.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00018.png new file mode 100644 index 0000000000000000000000000000000000000000..891a1c8f199713971d68fcd467b54fb80e9cad42 GIT binary patch literal 396 zcmV;70dxL|P)L6Npn>#6>TXZnwqTKWi1*=ohZ#bM-ItM2y%hR&_ z(zuvh(G!5!ERtFJjicEW$)pG;ii;P1CzE=vCO<*|i8YjcGj=s2*th7lQKcLw)w(G(?!zmD zk}>KoEW^G%(Gm+U({i6ynG~RL1jX>oCU3ra%F(i2!3phU$DOt82ot}+{O1z1B|MiK zS+h%_My){{{+%&5a;mH3TTv}C>3EF5u>}dtL5p)gC^FL~kcdQLiG(H3qAKiKF)nJq z!Z2s8i@N2{;abZi!hF^GG)nAgZUuWb;aJO#Xx@8yk}=Yp-H%wVO#t{|?Cbzydi|>Q zt$h3ukGFXCR`m_IYm@0Dza{x9@hx}m3Zu&mUr%02D;EjMjk)u(!3>nG0GiQf#keXu zx*CJB3GgIWq?YZXqpLCC9xxeYE1;z|5O$lhqSoj#0{{R30000000000Kr=7yb+dc3 Si72%I0000Nkl00QS&NfZqa29D(Q}!cx(H? z-~j<>8v&?{08~Z*Ff-o_2OdKK00000007+N1*#d!k~ZJ&GXMYp07*qoM6N<$f=Si0dst0#jpNJmUjnfAU zH(H;r6L8|QZzm2O4Kg{%^`6jC^N%XJAKzo)Ml>6`^Kehg4ZBbBGdPWyjlq?ce;b>5 zM|L+=EL4j!BfE`~DxxB&m;fo2@>X*o>7`JhCutSqd5JBS&i>gM4j-Oaf2u{?{Ywt+ zI6>u%Ckhs^syxumV(#JLQcOfVC?uuzY^sR7a|B=jzJ!DNwY}Uhx8`T9jC8`vZv`cj zxZ6=Fr68}OwH?5-7}iFnZ*UkR85B%u6x0yc+wuO%#i`)a zeDa)^A}*M)g?syes(u)og5C7eOgs~|1A;-3&wAHgUV%(CK|Gbo%pM<+;Tg%N-}Va& z3kwp)C_>H>)USqb9m_N3Ry^3%*iTHGkc;IADPGJD^F}0rRZi*6y|$i~g6D@mb5+ zNU9OtXO^%7ta7+hgR(K6i*f$B9Qd=N7!NbWYiJ>2@o!_Xy&1UODs+0ILD zDw772qX=Ftq=Kun_5V~LSJjccENInGa{wO6RzBdW$k=gpQe(}kM^#xe8i0ma6U)#I nkaFXij6vJ0bzvly4+8iDVFXB#5u30D00000NkvXXu0mjfL)=9K literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00022.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00022.png new file mode 100644 index 0000000000000000000000000000000000000000..891a1c8f199713971d68fcd467b54fb80e9cad42 GIT binary patch literal 396 zcmV;70dxL|P)L6Npn>#6>TXZnwqTKWi1*=ohZ#bM-ItM2y%hR&_ z(zuvh(G!5!ERtFJjicEW$)pG;ii;P1CzE=vCO<*|i8YjcGj=s2*th7lQKcLw)w(G(?!zmD zk}>KoEW^G%(Gm+U({i6ynG~RL1jX>oCU3ra%F(i2!3phU$DOt82ot}+{O1z1B|MiK zS+h%_My){{{+%&5a;mH3TTv}C>3EF5u>}dtL5p)gC^FL~kcdQLiG(H3qAKiKF)nJq z!Z2s8i@N2{;abZi!hF^GG)nAgZUuWb;aJO#Xx@8yk}=Yp-H%wVO#t{|?Cbzydi|>Q zt$h3ukGFXCR`m_IYm@0Dza{x9@hx}m3Zu&mUr%02D;EjMjk)u(!3>nG0GiQf#keXu zx*CJB3GgIWq?YZXqpLCC9xxeYE1;z|5O$lhqSoj#0{{R30000000000Kr=7yb+dc3 Si72%I0000Nkl00QS&NfZqa29D(Q}!cx(H? z-~j<>8v&?{08~Z*Ff-o_2OdKK00000007+N1*#d!k~ZJ&GXMYp07*qoM6N<$f=Si0dst0#jpNJmUjnfAU zH(H;r6L8|QZzm2O4Kg{%^`6jC^N%XJAKzo)Ml>6`^Kehg4ZBbBGdPWyjlq?ce;b>5 zM|L+=EL4j!BfE`~DxxB&m;fo2@>X*o>7`JhCutSqd5JBS&i>gM4j-Oaf2u{?{Ywt+ zI6>u%Ckhs^syxumV(#JLQcOfVC?uuzY^sR7a|B=jzJ!DNwY}Uhx8`T9jC8`vZv`cj zxZ6=Fr68}OwH?5-7}iFnZ*UkR85B%u6x0yc+wuO%#i`)a zeDa)^A}*M)g?syes(u)og5C7eOgs~|1A;-3&wAHgUV%(CK|Gbo%pM<+;Tg%N-}Va& z3kwp)C_>H>)USqb9m_N3Ry^3%*iTHGkc;IADPGJD^F}0rRZi*6y|$i~g6D@mb5+ zNU9OtXO^%7ta7+hgR(K6i*f$B9Qd=N7!NbWYiJ>2@o!_Xy&1UODs+0ILD zDw772qX=Ftq=Kun_5V~LSJjccENInGa{wO6RzBdW$k=gpQe(}kM^#xe8i0ma6U)#I nkaFXij6vJ0bzvly4+8iDVFXB#5u30D00000NkvXXu0mjfL)=9K literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00026.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00026.png new file mode 100644 index 0000000000000000000000000000000000000000..891a1c8f199713971d68fcd467b54fb80e9cad42 GIT binary patch literal 396 zcmV;70dxL|P)L6Npn>#6>TXZnwqTKWi1*=ohZ#bM-ItM2y%hR&_ z(zuvh(G!5!ERtFJjicEW$)pG;ii;P1CzE=vCO<*|i8YjcGj=s2*th7lQKcLw)w(G(?!zmD zk}>KoEW^G%(Gm+U({i6ynG~RL1jX>oCU3ra%F(i2!3phU$DOt82ot}+{O1z1B|MiK zS+h%_My){{{+%&5a;mH3TTv}C>3EF5u>}dtL5p)gC^FL~kcdQLiG(H3qAKiKF)nJq z!Z2s8i@N2{;abZi!hF^GG)nAgZUuWb;aJO#Xx@8yk}=Yp-H%wVO#t{|?Cbzydi|>Q zt$h3ukGFXCR`m_IYm@0Dza{x9@hx}m3Zu&mUr%02D;EjMjk)u(!3>nG0GiQf#keXu zx*CJB3GgIWq?YZXqpLCC9xxeYE1;z|5O$lhqSoj#0{{R30000000000Kr=7yb+dc3 Si72%I0000AmiOkJrNGaCY7ljpJ$%zJ1pdR-bJw-x%Q;PHJ6V%t z$J(##6R53xGjdh(&S}yGoqP1E%#!~1*iF@#&A&f(z45^nWqU&H? z(Rp&`HK%E-%&f19Mr>=J-?9J1vN_Su3}#+$m%be(zvxgdZ^*O_?|Kh1Ud%k!duz+7 zD`%G7@;iG&J?|Jc^E2K7v?;2SoYlOs^6l2rCv8v{(Lz-spE`TY~@7B z(8nLt+BS8X)?R-QVU{Vs^{`FLbNz;0k}E7~@+|$Bbx*XbZT8=*=?_UKB7Z_+L|IC_Uy4@#cX4VRjn5V0s%Q~loCIG~xlwkk> literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00029.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00029.png new file mode 100644 index 0000000000000000000000000000000000000000..006c26abaac6c76b2e871b194165596c0b416694 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!2~2j9iA5fsRN!ajv*Cu-d?-N*JQxc`taO| z-}VOL1%{U&gdOO)vH0QtN3CIpH=On}yd9NxI9#@L#=GYozkR+NZ@s(h_s<*5szDx| zmTO$v85!1fT#rxFzI@yL`PcK^*L-*W3fIF8>~K zzhRaAS`H?-=QM1i=Tu6{1-oD!M<5AJP1 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/s-swap_with_post_conditions/00030.png b/tests_zemu/snapshots/s-swap_with_post_conditions/00030.png new file mode 100644 index 0000000000000000000000000000000000000000..fe668c89ac31671418758bb5384eb8629e0d39bf GIT binary patch literal 452 zcmV;#0XzPQP)j`#CA+SY?0?js`ZvC_eo0Hu9F(I*C;&h&5t?MiHQu9ofT~hQoEyKArBGeS7}N zk>Hwg1vHW=$bUoM2RYB|o1q<9`6P(UV0!WICL93~{~FDib4*7^GxbC1&V*|Kd)7!z z{?!!1tdp`Zn8{r~sEf8!z!8WUpev!;2HiNC3MY~*!e+lQox6*fE~v9Xss9o!PFk*b zhlkk@P)(!N(pGDIk3?eBAI|R zctGfuRmY^=;&gLLE z$plQVchMXuC7=e^sWvtTDw&`ex0zT1swcIh0pMfC;u&ZS=q5Mrv!0=pV&6`<$IvIm zdMf8^FEz1Ngq`}hA!x~4Ke$EBL7hXmJHXM(QCFS1BaQuhcsh0$TZO{i0Y{YU4kQ_Ax`CR)me+*t{Hnd@+X4A2pu##y7Jp zRx@t;eYZvas89`2D^>zJ_b$>Pm-eDSC8#-ypkKcIQ7LMFG-3jhiS?zY%zL8%00000 c004Z2KLb7>Q)!EXga7~l07*qoM6N<$f_u5vy#N3J literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00001.png b/tests_zemu/snapshots/sp-contract_call_long_args/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c60d92397c735f9b8caf50b03ced9ce7e71572 GIT binary patch literal 748 zcmVtssF zD5gF26aWG_=XwB0@{|1E?SPk@b4ux+*YyPFgTxEmIajb{@w3~34(!!%cdOXHWegs1 zYmQ@9Kp|!)&T!HSusL+sJ!}OS9M|=QSOZYD$~xBjyEWz>`+ZJ7xqfF4IFxWV;Q^eN zX8-^I1lJxwPIy|(5efsP%V?V4CcR6puVH?058@>F$B9<#W^*6GO25AUd7*!32#8VnC zPabI}MdLK-^q+jfY#O(%*%qu9-EKxD44VOghC*Qoz<4#T<_k z=@(ozYo2_MBzzO%CM>E2r6q5QfUEAtU3OezT)iHNbvs5arz`03%z&Ei><_be)E477 zXRJGnuUg!PCftX5w$0$T;~D@il}zFvo>kLU)VLxnhz)x{gq9mVyu1@kg&>KKU&L0?)b}-+e&bH?_zGD5Ex~5^1W7ibF(Uu~ e00000oWU=^PW%L6L4zUy0000?{cJUiB6K08SxZn3Jvu|zI)Y*AUs%>JAvdJvFb9GMZ z59d^uDP48JCEQi5LDv4kg{(Tx5y@rgnRfA!E*IH)=Go8Kc52)69%TlG59NJRXMX!{ z_~hIZ`(-~BzpXP-n8~JcxgkX=;7p8q*UP?z`_GiE<2PP;dBW2AnawMf)*ITMND)8v i#CDG79-#N2;DZsr;)iyLbyoy4K_Z^6elF{r5}E+0w|go8 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00003.png b/tests_zemu/snapshots/sp-contract_call_long_args/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..3007712ee1ac8bbe590808efa3fd36bd796ce187 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2}AYZcrPebCi zH)?nOd)!IoS6QOT;kQ)w$^UyUteKt%1%O%@iuF$)4D$M9bgW|M{C~T%7O35HuCqI4 z@#bft{ON<6W*f_}ZFkvxc}9@d#&!9T&kiUucJZv}ak^XaB`9%L`ez+SE#A4u;(zORmc-mr|2ciZgis_xAd(|#6|he~@E|E^3bn!RfCCa>qeXUuBwv}I=4 z(E4l5p_fPdY&M*pw&9uNv7hd5n$G^4bj|xfnn#1N(1RY9KQlx5gu3ON+2wa0kqIl8 yNLiG>OfYLveveGWBCg6L`EM>2j36%~Kttv}cZFxlk0exbK!TpGelF{r5}E*IPnsqG literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00004.png b/tests_zemu/snapshots/sp-contract_call_long_args/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd52883d3c6d9d9e1df1f14c3e41119b38e5829 GIT binary patch literal 539 zcmV+$0_6RPP)`*U+ZZ;~@{cHfjTDNq|LqEmB;zZHqDH@>EU{%yn{waExy*FNBtwvw0!O zoly;XBz}G`X;-kE-XAIbOywA3o~K+PRmp7SwS^H+bIV~Vm;I`K%C3#@n2dP?tiO`q zf|?9Va@7-$nslbfpK3wAWXs-wAr$|($;~Z_H?JP_OMjOzDgp9=2Zo^2l-k^5v!XL< z{0U>1q3R?YvZ+{N7eO(d2ioX)09 zwi7UeO!TLrgqrA2h8(PfQD`O1!z+>DZTu*IslU#1M0M9)Jc(KrKiBRGmx@hgu(z4g zw>L5T9I>;iuI6$34%i7VX5{7EhtP9Sm=9U<&e9#cCINCZwFRhohW>>Sra4gdfE0000000000 d0001V{sH%;kg{D(3aEaktG3V{f)4fL&cpNsb ze%bQRd(m{;lvbT)S*AA6CExud56I_m94VFoYGPox{gd;`)MCB!noAwd7WkfvR7==g zv0&2KmbVSX&%Peg7u1Zkd_HATPI#bowAXGa1z(GYVTY$2J$z&Rv{=gpnMpJ5SBml( zX8YuvN%2Y4-iwO40))T&v1Uw^EO z(qW&&HTAK-%GpgJ>5rd!ab8?p#r|iDPXr&&`-bHrkJ;1;wr{gKyem0Bo=H#JsZQ0s zGg|d`>5*y4+`okkBv&r0`1wA^?Q{7>&K;)n=N%5n`sQA?@7h}DtA#lS{Qu7im|eg! zRVe?!BJ;aXDn(20*s?tR?_O5()MvIyRpr52saIQn{+Hcg^=q;qzt0Wl43y@SKZGJ@+ND>(Ggh=^nI7yA}3YVujUA0*@H>gTe~DWM4f$8Oyx literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00006.png b/tests_zemu/snapshots/sp-contract_call_long_args/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..aade4dfd1622600e23f14395022f830b0146c17a GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Fba4!+nDh2#?xbb~o`%G2 zmuFY}S1z3Xub}NDQ)j~A<5#}_+*+D>LExej2T<36lKQyDq@GWY3uWRa1{d6)v0v@j zjNXHG7t6lMiCaxwyXL+`vXziaVEE{J~x}HDY)0&2ZDc+Ifzev*ON`ALw25Vpq?mjdRP_*QHk9-&y!T zWQ*}zv#f`|^&Z%;-n~$2oBB9&y<4-DlpTX^u*<3=UpOYZZ#nj`dx^xy-RFdXuJr%H z{J!aReMjoCrzPhv7TxCG;k(WvExY$t)6$#;x^rUP%=Z1ziAzopr0M5O~mH+?% literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00007.png b/tests_zemu/snapshots/sp-contract_call_long_args/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..db320aacd3750402a291aa8cf928c90fcaf3dc25 GIT binary patch literal 323 zcmV-J0lfZ+P)5u=m{`Q0yj2|`MvdG358cYF#r7pnq=|4J(W92Qt9kO527T_k?Uyx*4 zXoK0q$8E1Z3G^hAJc0gWt4Wsq(=4P~_D`k;k#wO*?%_z%3jhEB000000001o`36qk Vwu|6ptx^C0002ovPDHLkV1mltk_i9+ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00008.png b/tests_zemu/snapshots/sp-contract_call_long_args/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..1f95cf228589972c4400e9c4f24de22882e527db GIT binary patch literal 822 zcmV-61Ihe}P)Pc=PSVigaiWQBqaa<00000z_a9>bIz-^u=u-L zfr)Hx`kSBC3OLk8ysoPhUe|R$Dj#aZ!ado21zaD}w=+be*B?r)%{gfW5RR~~%hoHP z1eu7fi|}-{9%c6x5a&44-)!xGdoK-cr$y{gPn-(z(EbO1!q$7h|G=Ns3OoRr@(4iy z01(951IWQn47K9nkKBpGe2!RtCwXcC(umOu(Om3Zl;@oqdZy3enCmGH$LQBVJIuM| z#s^Z!n<6Eo1>TOR3_q9}%4@=+@`i3&<6_;KmB-Ndq~MZTT{1UqnuI4|-GqbsJ)49X zxkhOUYjINaYj8NCB=5+*pQ{e2qnND?58uXOj0}v|8ic$^FeHnBC`qg##(ko;J6Oy^V+ z#6ua6?D4mo#)&*hfqF<$(2Z(jSpPKyQ^Wc%10SpeQD`NOk>P`>becDk-pU_%Me&iQ zQ!T9BsExj~Hn~3H(CQMg5i)koELuqqd{o*v-KSznd<@3Z5hWvzH0E4zXd3<5&^&yB z9B;v(T=d)*0DX_SsUYveqhIT3>q-~#{v0N{)F z{vS|p!sOU0mL%mxHa}AuKP58WkMk0)&+o*|k{apB`e`Kb8F^%syujPP4YgA`8coT7 zvpD!aVyzj_;35d-@sA|9>a~bO(pya-sC;!xG_5A_-U{doKF`9tTfW(z6oP)`PVnlF zbKQfWOYMWm?>LQ)#+3mUzi+La2Ydhk0001;f1k*lRlAigcK`qY07*qoM6N<$f*@ms AlK=n! literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00009.png b/tests_zemu/snapshots/sp-contract_call_long_args/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..b603f27299361beaff4d344081c05cf14960b645 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QvW?&978JRyuIPrcgTQ;^}@M~ zyh*?1HOptZx{5Hha$UUD_&rSY)uF$hZ#q&L85%DCbrCO^67~95fLG_*CmZj-VB*`j zY`@$6Fs0@DUogqN+?*}F^IDWwrr`Z&(O#bWURSU5ci0)RPW*A+i^GR?mRT}3+d6*l z)mXbneZkT1QP)mJ*H8Y%@@D&1kCWT~Px>Qe_2yBX#24er*K;4b-&=ppisyNxmH*^& zwwlf>x*7a;*&d|MH)byRpKv+WA$;A!gE|cF4Kn}Fy!zH&pz&zU?wgn8(+~9A57uAA zUHQ&)VsOpjH)hV${$;*%(fvC)ve{!-fJ(8&qzXo$w;|wx!T*KaEs}w{^5;PUp00i_ I>zopr0Keyo;Q#;t literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00010.png b/tests_zemu/snapshots/sp-contract_call_long_args/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..22822ee2621172d3ba3def746922c173ba60aacf GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Eba4!+nDh2#^twX|0u6~K z>FRIlJ>MKlfHCExaVGG7Mgxl>e937o`RI3 zFW(w2)K#y_?>-i{WEcCF+Z$im?&bU-oby~t?anlRiQmuCm_6IR=vx(6J#TQ%*)Qxj z%Z8bc;fwHW<|?x}haYdfl4lmVcAjdy!nWx>kGQ?&YKLs>jmTKSyjJJF`Oo}E%IAMf z(be2vm~rd>i>S5|gL0%2*Cu~R zX*c@G((*lI26OOF{^xm|K?i44x(ixm$1mK%Zj--rtEE9G;q?y3hw?w99^&Y8xr*nr*rq6OF7$BQPNJQxz9 e4-7$MU~rbbFi4y))Nn^VNZ8ZW&t;ucLK6T6J-z1u literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00011.png b/tests_zemu/snapshots/sp-contract_call_long_args/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..0c71d1d93df800f6bc6218460017ff4cf1fc84b1 GIT binary patch literal 921 zcmV;K17`e*P)K@+xzYDMHDucpDp-4Jf!A&1$_X@Zk zq}J3cV?_KUs;y^qX~kiiXvtDet^mT)SxGzu3OBQL1(Xh3`bS&gflR}1j|o8#1j|5sK#9fTA&(T+ky^Y%X<|eh5dg=3aBAcgMFY4nXsFg8+9`Gi zwA;XbrY7a!LsAalnsTCn>(P>KT9!#{Q8Q1gVwbcWYEK?R?URB_f~=ffZI|#OP%6S` z-`or2$W=%)Sc{XQUya=nC3!<)(>1CC_=}6Cq!xB9b`Wiv9v_y3HW3gddD2^q@?D|7 z5rTXzt4yf1QUD8~$M9f(6c7{DP zjbIODJhF?gNO3D*S7YGLH3AOD@y$2$Z}U6Mh$jvospV zuQtuqlh^{XRO#il{-%m=-5iVW!5D!s$Wsga!p}<_j5@$K{crdp=*leBoi7Oqu_P&D zG$pA%Qaug+Jbh&JXMyK6uGp341WHD_eE4sw<3sT7222P+_XqdBL^e0F2Y{4n*DeY| vInUktEVop7Z(jdQ`T2wof*=TjAeh8IGA}8z(ji(e00000NkvXXu0mjfPtmFV literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00012.png b/tests_zemu/snapshots/sp-contract_call_long_args/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..d99fa0b21734c5b25386928b1110a512648536a8 GIT binary patch literal 461 zcmV;;0W$uHP)HGY&$VY;RGz0(u003PnrIb?bCsC{{dAwMb zsnxvBk8^t$H3C$|F~+Fga=c!aan8Z7XJg@Wc<;f#FUA;iL~0?ktCd$mI)iINcSr@=EfY@ORlbD$iuz^8fHyf z=js3QY|Kc^!LMEr003}xdLy{Qm+h#vyPzBq@u4I>Yt=I0^JG+xF-KIx7V?Tx(vhP_?Y3|5R)V5-Yo1B2vXDRmcdP`46PybhpYjOhi zSseH2Nt;YS<6oyy;ytFm)@o|=w>+g#-}A;H3@s@`{cp6`y7!6OxW}mmndrMwLQV9Y zk%K$23f-v_WOA?+;ROHy0000000000000000G9a!jVoVnuHG%CpU#%bfl#&pZ5;=Lfs>AECUynhS{x46l#Q zW<2{k?eBzl`=^9G+QHFsJs?@+K*SZMDf?O0EZ*UGf+=V6Uy+Rr)~Wwn{)=<2G~wr6 zEL9?y((zv4?s=8Te^dQ}e7}h=W}EiHY1)j#(>(NnK0yWsXQi*b?0$Y_Pn07_*wfX| JWt~$(6999(hO__x literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00014.png b/tests_zemu/snapshots/sp-contract_call_long_args/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..35f106cdc659c2f1b8b19b89972c4ac1bc9c95db GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9eba4!+nDh2#B44utPg~-) zH)?nOd+a@3H^YRb@R7*RU3<^#PnHah)-VVL>B{>)L-v3}+P0V{bDq0>>OXUad%+u1 z>jwW*Jij!|HqZI|X>$COKj#FP?cKOPl`IbpUFEgrz2~i|9LCIAww7O$bS6JLbzT;mCD$9$wAZu!4%?lt_h3iF*6Tf+zUsVO$5`*Qi}fqV zmd7j%rdrtt-X(rbSs!l4kg4{}jcnpTFU&z{>Y5TC5s#&!66< zwJvgbrwD)2;$Y>{glV%G?QD*JWp6$ASR~y+==8;auRJsM#ai!jGMjy}y?si&;rsf_ zbHBVQIc9w1ev+}x#~r_4?)Ol3`n%wFYsGZ=^^H63zjr!SHpz##O=&MM5RkzEgM7A& VyW{PTukZy4d%F6$taD0e0sw1>rJ?`; literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00015.png b/tests_zemu/snapshots/sp-contract_call_long_args/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..404a33596b07383dda8943c0ee6b42968b0a51dc GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9gba4!+nDh2#qEM59KwDzg zF3#`vm+mc<_p@f%5!Jc-#_vBFCWbGaT?|!$njVyxzvtpnRC=0q?&fN>|9&p3j&(eH z7|ZBAbMCyON|TD?%w9TWuKWD=9Z;yw^L=k(i(UAy%tdkmH-)!+o22}@WXld)hsV2p zuEj2_K2T@uw!h;x!)b=ypXJ=TrzV%q+L`z)U~9mi+2_LU7(Vd#`LA-uS)ZZiY&}oJ zv$8i#PhZVDbf-t|J#V&RpTgKeCJ!!i$ zKYKg>{CDZ2eN;PNMdzM*S0{M>H<`P_^MA^gM)h@0^UR!<@wO?&0RsUUB+O8^kAM33 Sw(w6*kg%t#pUXO@geCxpX{74_ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00016.png b/tests_zemu/snapshots/sp-contract_call_long_args/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4be69934787c368c2b5ed677cc7f5a2470be3b GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hpba4!+nDh2#G+&c}K^PbX0`eJS}y70`%8T>n^%dV>bk>TM}C(cF@9*Jbj^5WTF;gKGIO)y zjlJ*9*PE9W@jdm~5r5wEu#TD8y6+Pnh8_O<-8#^Bx$bnOy3REWn^jXeAFev)TXe-F zTky7j?62N_lL@yzwx7O!=&4O1W7^|)7fcr%%i5*3D%0_G;tl)cpW3Io3*7!cdXW1o sV&B=e%knGs=l(tai5cc!1_ryAe9w9}zGZ%X&;TUp>FVdQ&MBb@086r+N&o-= literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-contract_call_long_args/00017.png b/tests_zemu/snapshots/sp-contract_call_long_args/00017.png new file mode 100644 index 0000000000000000000000000000000000000000..0425466580963a2bef09ca2320cb40d8843caf4e GIT binary patch literal 511 zcmVxy1gt*>D?pb7$J^uQ z6u**uQJ}E>hp-u-86aK-Z1@Wygb+dqA%qYg$1gOyHfEUU(MbRR002ovPDHLkV1hoO B;)(zO literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-mainmenu/00004.png b/tests_zemu/snapshots/sp-mainmenu/00004.png index d8ed08de1a07e8baf8ebcf8b80a7659fbeacb3d0..66e6ea9b2f48d3740547646f827ed287ff294b26 100644 GIT binary patch delta 362 zcmeyv)XF?TrQXNW#WAE}&fA;Oe9a01t%^Q z3A>qOmWnL4`dU4^>659#v5Xr>Us=u67+n+y3{W7?jHmA<-R*>!e=MTPpQk}EZ zSZ3PW_9qPbtjQkxL)x9+#6`S&I2nPtP#8YQ?^C<^`Iw66eRhzjr>mdKI;Vst E08mM*CjbBd delta 353 zcmZo={=+murQX@o#WAE}&f6P-e9a01u7S5o)Zf*6zF8{2jD=l7M6m7Iy!FRcsphw6 zTCp=AfZWGfwhSk$^Q z3A>qOmWnL4`dU4^>659#v5Xr>Us=u67+n+y3{W7?jHmA<-R*>!e=MTPpQk}EZ zSZ3PW_9qPbtjQkxL)x9+#6`S&I2nPtP#8YQ?^C<^`Iw66eRhzjr>mdKI;Vst E08mM*CjbBd delta 353 zcmZo={=+murQX@o#WAE}&f6P-e9a01u7S5o)Zf*6zF8{2jD=l7M6m7Iy!FRcsphw6 zTCp=AfZWGfwhSk$@P)(!N(pGDIk3?eBAI|R zctGfuRmY^=;&gLLE z$plQVchMXuC7=e^sWvtTDw&`ex0zT1swcIh0pMfC;u&ZS=q5Mrv!0=pV&6`<$IvIm zdMf8^FEz1Ngq`}hA!x~4Ke$EBL7hXmJHXM(QCFS1BaQuhcsh0$TZO{i0Y{YU4kQ_Ax`CR)me+*t{Hnd@+X4A2pu##y7Jp zRx@t;eYZvas89`2D^>zJ_b$>Pm-eDSC8#-ypkKcIQ7LMFG-3jhiS?zY%zL8%00000 c004Z2KLb7>Q)!EXga7~l07*qoM6N<$f_u5vy#N3J literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00001.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c60d92397c735f9b8caf50b03ced9ce7e71572 GIT binary patch literal 748 zcmVtssF zD5gF26aWG_=XwB0@{|1E?SPk@b4ux+*YyPFgTxEmIajb{@w3~34(!!%cdOXHWegs1 zYmQ@9Kp|!)&T!HSusL+sJ!}OS9M|=QSOZYD$~xBjyEWz>`+ZJ7xqfF4IFxWV;Q^eN zX8-^I1lJxwPIy|(5efsP%V?V4CcR6puVH?058@>F$B9<#W^*6GO25AUd7*!32#8VnC zPabI}MdLK-^q+jfY#O(%*%qu9-EKxD44VOghC*Qoz<4#T<_k z=@(ozYo2_MBzzO%CM>E2r6q5QfUEAtU3OezT)iHNbvs5arz`03%z&Ei><_be)E477 zXRJGnuUg!PCftX5w$0$T;~D@il}zFvo>kLU)VLxnhz)x{gq9mVyu1@kg&>KKU&L0?)b}-+e&bH?_zGD5Ex~5^1W7ibF(Uu~ e00000oWU=^PW%L6L4zUy0000?{cJUiB6K08SxZn3Jvu|zI)Y*AUs%>JAvdJvFb9GMZ z59d^uDP48JCEQi5LDv4kg{(Tx5y@rgnRfA!E*IH)=Go8Kc52)69%TlG59NJRXMX!{ z_~hIZ`(-~BzpXP-n8~JcxgkX=;7p8q*UP?z`_GiE<2PP;dBW2AnawMf)*ITMND)8v i#CDG79-#N2;DZsr;)iyLbyoy4K_Z^6elF{r5}E+0w|go8 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00003.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..3007712ee1ac8bbe590808efa3fd36bd796ce187 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2}AYZcrPebCi zH)?nOd)!IoS6QOT;kQ)w$^UyUteKt%1%O%@iuF$)4D$M9bgW|M{C~T%7O35HuCqI4 z@#bft{ON<6W*f_}ZFkvxc}9@d#&!9T&kiUucJZv}ak^XaB`9%L`ez+SE#A4u;(zORmc-mr|2ciZgis_xAd(|#6|he~@E|E^3bn!RfCCa>qeXUuBwv}I=4 z(E4l5p_fPdY&M*pw&9uNv7hd5n$G^4bj|xfnn#1N(1RY9KQlx5gu3ON+2wa0kqIl8 yNLiG>OfYLveveGWBCg6L`EM>2j36%~Kttv}cZFxlk0exbK!TpGelF{r5}E*IPnsqG literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00004.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd52883d3c6d9d9e1df1f14c3e41119b38e5829 GIT binary patch literal 539 zcmV+$0_6RPP)`*U+ZZ;~@{cHfjTDNq|LqEmB;zZHqDH@>EU{%yn{waExy*FNBtwvw0!O zoly;XBz}G`X;-kE-XAIbOywA3o~K+PRmp7SwS^H+bIV~Vm;I`K%C3#@n2dP?tiO`q zf|?9Va@7-$nslbfpK3wAWXs-wAr$|($;~Z_H?JP_OMjOzDgp9=2Zo^2l-k^5v!XL< z{0U>1q3R?YvZ+{N7eO(d2ioX)09 zwi7UeO!TLrgqrA2h8(PfQD`O1!z+>DZTu*IslU#1M0M9)Jc(KrKiBRGmx@hgu(z4g zw>L5T9I>;iuI6$34%i7VX5{7EhtP9Sm=9U<&e9#cCINCZwFRhohW>>Sra4gdfE0000000000 d0001V{sH%;kg{D(3aEaktG3V{f)4fL&cpNsb ze%bQRd(m{;lvbT)S*AA6CExud56I_m94VFoYGPox{gd;`)MCB!noAwd7WkfvR7==g zv0&2KmbVSX&%Peg7u1Zkd_HATPI#bowAXGa1z(GYVTY$2J$z&Rv{=gpnMpJ5SBml( zX8YuvN%2Y4-iwO40))T&v1Uw^EO z(qW&&HTAK-%GpgJ>5rd!ab8?p#r|iDPXr&&`-bHrkJ;1;wr{gKyem0Bo=H#JsZQ0s zGg|d`>5*y4+`okkBv&r0`1wA^?Q{7>&K;)n=N%5n`sQA?@7h}DtA#lS{Qu7im|eg! zRVe?!BJ;aXDn(20*s?tR?_O5()MvIyRpr52saIQn{+Hcg^=q;qzt0Wl43y@SKZGJ@+ND>(Ggh=^nI7yA}3YVujUA0*@H>gTe~DWM4f$8Oyx literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00006.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..aade4dfd1622600e23f14395022f830b0146c17a GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Fba4!+nDh2#?xbb~o`%G2 zmuFY}S1z3Xub}NDQ)j~A<5#}_+*+D>LExej2T<36lKQyDq@GWY3uWRa1{d6)v0v@j zjNXHG7t6lMiCaxwyXL+`vXziaVEE{J~x}HDY)0&2ZDc+Ifzev*ON`ALw25Vpq?mjdRP_*QHk9-&y!T zWQ*}zv#f`|^&Z%;-n~$2oBB9&y<4-DlpTX^u*<3=UpOYZZ#nj`dx^xy-RFdXuJr%H z{J!aReMjoCrzPhv7TxCG;k(WvExY$t)6$#;x^rUP%=Z1ziAzopr0M5O~mH+?% literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00007.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..db320aacd3750402a291aa8cf928c90fcaf3dc25 GIT binary patch literal 323 zcmV-J0lfZ+P)5u=m{`Q0yj2|`MvdG358cYF#r7pnq=|4J(W92Qt9kO527T_k?Uyx*4 zXoK0q$8E1Z3G^hAJc0gWt4Wsq(=4P~_D`k;k#wO*?%_z%3jhEB000000001o`36qk Vwu|6ptx^C0002ovPDHLkV1mltk_i9+ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00008.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..1f95cf228589972c4400e9c4f24de22882e527db GIT binary patch literal 822 zcmV-61Ihe}P)Pc=PSVigaiWQBqaa<00000z_a9>bIz-^u=u-L zfr)Hx`kSBC3OLk8ysoPhUe|R$Dj#aZ!ado21zaD}w=+be*B?r)%{gfW5RR~~%hoHP z1eu7fi|}-{9%c6x5a&44-)!xGdoK-cr$y{gPn-(z(EbO1!q$7h|G=Ns3OoRr@(4iy z01(951IWQn47K9nkKBpGe2!RtCwXcC(umOu(Om3Zl;@oqdZy3enCmGH$LQBVJIuM| z#s^Z!n<6Eo1>TOR3_q9}%4@=+@`i3&<6_;KmB-Ndq~MZTT{1UqnuI4|-GqbsJ)49X zxkhOUYjINaYj8NCB=5+*pQ{e2qnND?58uXOj0}v|8ic$^FeHnBC`qg##(ko;J6Oy^V+ z#6ua6?D4mo#)&*hfqF<$(2Z(jSpPKyQ^Wc%10SpeQD`NOk>P`>becDk-pU_%Me&iQ zQ!T9BsExj~Hn~3H(CQMg5i)koELuqqd{o*v-KSznd<@3Z5hWvzH0E4zXd3<5&^&yB z9B;v(T=d)*0DX_SsUYveqhIT3>q-~#{v0N{)F z{vS|p!sOU0mL%mxHa}AuKP58WkMk0)&+o*|k{apB`e`Kb8F^%syujPP4YgA`8coT7 zvpD!aVyzj_;35d-@sA|9>a~bO(pya-sC;!xG_5A_-U{doKF`9tTfW(z6oP)`PVnlF zbKQfWOYMWm?>LQ)#+3mUzi+La2Ydhk0001;f1k*lRlAigcK`qY07*qoM6N<$f*@ms AlK=n! literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00009.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..b603f27299361beaff4d344081c05cf14960b645 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QvW?&978JRyuIPrcgTQ;^}@M~ zyh*?1HOptZx{5Hha$UUD_&rSY)uF$hZ#q&L85%DCbrCO^67~95fLG_*CmZj-VB*`j zY`@$6Fs0@DUogqN+?*}F^IDWwrr`Z&(O#bWURSU5ci0)RPW*A+i^GR?mRT}3+d6*l z)mXbneZkT1QP)mJ*H8Y%@@D&1kCWT~Px>Qe_2yBX#24er*K;4b-&=ppisyNxmH*^& zwwlf>x*7a;*&d|MH)byRpKv+WA$;A!gE|cF4Kn}Fy!zH&pz&zU?wgn8(+~9A57uAA zUHQ&)VsOpjH)hV${$;*%(fvC)ve{!-fJ(8&qzXo$w;|wx!T*KaEs}w{^5;PUp00i_ I>zopr0Keyo;Q#;t literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00010.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..22822ee2621172d3ba3def746922c173ba60aacf GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Eba4!+nDh2#^twX|0u6~K z>FRIlJ>MKlfHCExaVGG7Mgxl>e937o`RI3 zFW(w2)K#y_?>-i{WEcCF+Z$im?&bU-oby~t?anlRiQmuCm_6IR=vx(6J#TQ%*)Qxj z%Z8bc;fwHW<|?x}haYdfl4lmVcAjdy!nWx>kGQ?&YKLs>jmTKSyjJJF`Oo}E%IAMf z(be2vm~rd>i>S5|gL0%2*Cu~R zX*c@G((*lI26OOF{^xm|K?i44x(ixm$1mK%Zj--rtEE9G;q?y3hw?w99^&Y8xr*nr*rq6OF7$BQPNJQxz9 e4-7$MU~rbbFi4y))Nn^VNZ8ZW&t;ucLK6T6J-z1u literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00011.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..0c71d1d93df800f6bc6218460017ff4cf1fc84b1 GIT binary patch literal 921 zcmV;K17`e*P)K@+xzYDMHDucpDp-4Jf!A&1$_X@Zk zq}J3cV?_KUs;y^qX~kiiXvtDet^mT)SxGzu3OBQL1(Xh3`bS&gflR}1j|o8#1j|5sK#9fTA&(T+ky^Y%X<|eh5dg=3aBAcgMFY4nXsFg8+9`Gi zwA;XbrY7a!LsAalnsTCn>(P>KT9!#{Q8Q1gVwbcWYEK?R?URB_f~=ffZI|#OP%6S` z-`or2$W=%)Sc{XQUya=nC3!<)(>1CC_=}6Cq!xB9b`Wiv9v_y3HW3gddD2^q@?D|7 z5rTXzt4yf1QUD8~$M9f(6c7{DP zjbIODJhF?gNO3D*S7YGLH3AOD@y$2$Z}U6Mh$jvospV zuQtuqlh^{XRO#il{-%m=-5iVW!5D!s$Wsga!p}<_j5@$K{crdp=*leBoi7Oqu_P&D zG$pA%Qaug+Jbh&JXMyK6uGp341WHD_eE4sw<3sT7222P+_XqdBL^e0F2Y{4n*DeY| vInUktEVop7Z(jdQ`T2wof*=TjAeh8IGA}8z(ji(e00000NkvXXu0mjfPtmFV literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00012.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..d99fa0b21734c5b25386928b1110a512648536a8 GIT binary patch literal 461 zcmV;;0W$uHP)HGY&$VY;RGz0(u003PnrIb?bCsC{{dAwMb zsnxvBk8^t$H3C$|F~+Fga=c!aan8Z7XJg@Wc<;f#FUA;iL~0?ktCd$mI)iINcSr@=EfY@ORlbD$iuz^8fHyf z=js3QY|Kc^!LMEr003}xdLy{Qm+h#vyPzBq@u4I>Yt=I0^JG+xF-KIx7V?Tx(vhP_?Y3|5R)V5-Yo1B2vXDRmcdP`46PybhpYjOhi zSseH2Nt;YS<6oyy;ytFm)@o|=w>+g#-}A;H3@s@`{cp6`y7!6OxW}mmndrMwLQV9Y zk%K$23f-v_WOA?+;ROHy0000000000000000G9a!jVoVnuHG%CpU#%bfl#&pZ5;=Lfs>AECUynhS{x46l#Q zW<2{k?eBzl`=^9G+QHFsJs?@+K*SZMDf?O0EZ*UGf+=V6Uy+Rr)~Wwn{)=<2G~wr6 zEL9?y((zv4?s=8Te^dQ}e7}h=W}EiHY1)j#(>(NnK0yWsXQi*b?0$Y_Pn07_*wfX| JWt~$(6999(hO__x literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00014.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..35f106cdc659c2f1b8b19b89972c4ac1bc9c95db GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9eba4!+nDh2#B44utPg~-) zH)?nOd+a@3H^YRb@R7*RU3<^#PnHah)-VVL>B{>)L-v3}+P0V{bDq0>>OXUad%+u1 z>jwW*Jij!|HqZI|X>$COKj#FP?cKOPl`IbpUFEgrz2~i|9LCIAww7O$bS6JLbzT;mCD$9$wAZu!4%?lt_h3iF*6Tf+zUsVO$5`*Qi}fqV zmd7j%rdrtt-X(rbSs!l4kg4{}jcnpTFU&z{>Y5TC5s#&!66< zwJvgbrwD)2;$Y>{glV%G?QD*JWp6$ASR~y+==8;auRJsM#ai!jGMjy}y?si&;rsf_ zbHBVQIc9w1ev+}x#~r_4?)Ol3`n%wFYsGZ=^^H63zjr!SHpz##O=&MM5RkzEgM7A& VyW{PTukZy4d%F6$taD0e0sw1>rJ?`; literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00015.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..404a33596b07383dda8943c0ee6b42968b0a51dc GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9gba4!+nDh2#qEM59KwDzg zF3#`vm+mc<_p@f%5!Jc-#_vBFCWbGaT?|!$njVyxzvtpnRC=0q?&fN>|9&p3j&(eH z7|ZBAbMCyON|TD?%w9TWuKWD=9Z;yw^L=k(i(UAy%tdkmH-)!+o22}@WXld)hsV2p zuEj2_K2T@uw!h;x!)b=ypXJ=TrzV%q+L`z)U~9mi+2_LU7(Vd#`LA-uS)ZZiY&}oJ zv$8i#PhZVDbf-t|J#V&RpTgKeCJ!!i$ zKYKg>{CDZ2eN;PNMdzM*S0{M>H<`P_^MA^gM)h@0^UR!<@wO?&0RsUUB+O8^kAM33 Sw(w6*kg%t#pUXO@geCxpX{74_ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00016.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9e41f4941961115bc8f216bf56a900c37db496 GIT binary patch literal 846 zcmV-U1F`&xP)Z&sPFM2xJ5nNlE|!00000Oy_G=$2n*E^*9bo zMy>MIHZ|#PbqPQ7yQCb)!92lgI~0ytG@Hc^VC0;OOXvqymB>U>|H&p)xh#Bwx4u^! zz;PDD=>sWzd{A4law_cfHI2n9K%Ii%gV{QLYz;kx^?Sg~?wkO%ipPbZIIYfmLd2JB z?0`g`3^jjfvtX9jN53EqCVkJz2)T0{1G+Up2VbyrYHcPqMma_5` z6n`kBq}5g?>>QeeZ^Fw31?{``He=+~$uiiAld4~X!%-!jY`LY-bO4QFzBMv@JBu+g zFxhGlYM5_85l|)BY^ZUcnOz-kB?R@|Ny+TIldr#uvMV^-L!WTrjv-7&9;pvQcXc{3N%4B4Z-{CkX@}vdoAwxko<|JeGr=d(WW`8p9 z!AcN?R#KT{_~2GLr#F(`${%DywaT)I3R`c~PG6QzX^%QITB0gpW4EToD(OLv${J_2 zRxOE-!KocFGU7<*nF|ihqCXp&hhHGaH8_+Pz3K%(pAw&VlTHWRH~W3dwtJ@1-*?@( zhEq~~Pi``!(*f2C`k-UVkc#rsk<^?;S}Bq?xOLfe&>w>2Xqz6NWN&xDONdBfnHg!d zvKCO>ue3>O$+He+Luq!i>B$;QMy`E|Sx#4eEs_yC>kjZQiI@+l5%R&QTEjHRE-cAI z{58XxAhiq27)!~1Tyr7@Bftj$006)r=KWKiZo=%?s+J_aB>x(pya-sC=!K zSXSM{ycN(Fe6B@yw|ukRDFnT8Cz$%<-0DHF3iUzccbrZ~TE*R~T+w-R&%u1gB{P&~t`TsuQQ}{*CN5UY1y?5)`H=>FgI&TM)-XOP5EBWf;xlc9x><*o&O{&J9`h>O^^y@zqySsl8Bg4hV z^B7O|oqenDc46J=x7&TbZoBpJ{>KkZVMjdcL*z6w!%J?)X>Xn%wat3ko}1of4fTuH z9@$*xuqpAvr1gCZ*($Fw$vio46dk?ug+!J>l;Gr-vH|xN${e&)dD}nbd2+v9@un+N z+NGW=?d8{*`1+*U%s0C|m&|%&oy?oIi0f?0#FT3Z8ke|1;e`ZvKJ%}%V0`azXO1{X N)YH|^Wt~$(697H(w^jfE literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00018.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00018.png new file mode 100644 index 0000000000000000000000000000000000000000..fecc41ede4831c9c119eb9b75aea4caf0e7b72ab GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hrba4!+nDh2#w9p|19*2vs z!fyPZv`O54!%Uw3CcoJW_CD`+)G!hBD!mQV!%)sYKheeIw5IBO$B$}CW{hWNEv@i7 zpUnDX_C@`=_xFOleoc&3J$qGI>DIoR8^e>UMXzh>g`R)Hb>4e@-c>=*-HTEKlV{(2 z@#Mx$C&RG2OU(^$@11e)$=%ws%8bVM|E`VF@G6^p_^NLBy?1lM4j8c8&YD_ZTk<>C zk=^c=VOv}Etsonr1oH_p+`V55@;B-}celB5`4#)I$Y!929vqjE`H@z4!g}?yWkn*h zHeT>*cbf9U{NdF2VA&(;51x5A7zhdUu;{403JLggHTCrW5+2zei8{62&3O|#_sw=& s(YepKNT4%TL+JcNj}~!|Z;`-`Gu*uzopr0Bi1%=>Px# literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00019.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00019.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9e41f4941961115bc8f216bf56a900c37db496 GIT binary patch literal 846 zcmV-U1F`&xP)Z&sPFM2xJ5nNlE|!00000Oy_G=$2n*E^*9bo zMy>MIHZ|#PbqPQ7yQCb)!92lgI~0ytG@Hc^VC0;OOXvqymB>U>|H&p)xh#Bwx4u^! zz;PDD=>sWzd{A4law_cfHI2n9K%Ii%gV{QLYz;kx^?Sg~?wkO%ipPbZIIYfmLd2JB z?0`g`3^jjfvtX9jN53EqCVkJz2)T0{1G+Up2VbyrYHcPqMma_5` z6n`kBq}5g?>>QeeZ^Fw31?{``He=+~$uiiAld4~X!%-!jY`LY-bO4QFzBMv@JBu+g zFxhGlYM5_85l|)BY^ZUcnOz-kB?R@|Ny+TIldr#uvMV^-L!WTrjv-7&9;pvQcXc{3N%4B4Z-{CkX@}vdoAwxko<|JeGr=d(WW`8p9 z!AcN?R#KT{_~2GLr#F(`${%DywaT)I3R`c~PG6QzX^%QITB0gpW4EToD(OLv${J_2 zRxOE-!KocFGU7<*nF|ihqCXp&hhHGaH8_+Pz3K%(pAw&VlTHWRH~W3dwtJ@1-*?@( zhEq~~Pi``!(*f2C`k-UVkc#rsk<^?;S}Bq?xOLfe&>w>2Xqz6NWN&xDONdBfnHg!d zvKCO>ue3>O$+He+Luq!i>B$;QMy`E|Sx#4eEs_yC>kjZQiI@+l5%R&QTEjHRE-cAI z{58XxAhiq27)!~1Tyr7@Bftj$006)r=KWKiZo=%?s+J_aB>x(pya-sC=!K zSXSM{ycN(Fe6B@yw|ukRDFnT8Cz$%<-0DHF3iUzccbrZ~TE*R~T+w-R&%u1gB{P&~t`TsuQQ}{*CN5UY1y?5)`H=>FgI&TM)-XOP5EBWf;xlc9x><*o&O{&J9`h>O^^y@zqySsl8Bg4hV z^B7O|oqenDc46J=x7&TbZoBpJ{>KkZVMjdcL*z6w!%J?)X>Xn%wat3ko}1of4fTuH z9@$*xuqpAvr1gCZ*($Fw$vio46dk?ug+!J>l;Gr-vH|xN${e&)dD}nbd2+v9@un+N z+NGW=?d8{*`1+*U%s0C|m&|%&oy?oIi0f?0#FT3Z8ke|1;e`ZvKJ%}%V0`azXO1{X N)YH|^Wt~$(697H(w^jfE literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00021.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00021.png new file mode 100644 index 0000000000000000000000000000000000000000..fecc41ede4831c9c119eb9b75aea4caf0e7b72ab GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hrba4!+nDh2#w9p|19*2vs z!fyPZv`O54!%Uw3CcoJW_CD`+)G!hBD!mQV!%)sYKheeIw5IBO$B$}CW{hWNEv@i7 zpUnDX_C@`=_xFOleoc&3J$qGI>DIoR8^e>UMXzh>g`R)Hb>4e@-c>=*-HTEKlV{(2 z@#Mx$C&RG2OU(^$@11e)$=%ws%8bVM|E`VF@G6^p_^NLBy?1lM4j8c8&YD_ZTk<>C zk=^c=VOv}Etsonr1oH_p+`V55@;B-}celB5`4#)I$Y!929vqjE`H@z4!g}?yWkn*h zHeT>*cbf9U{NdF2VA&(;51x5A7zhdUu;{403JLggHTCrW5+2zei8{62&3O|#_sw=& s(YepKNT4%TL+JcNj}~!|Z;`-`Gu*uzopr0Bi1%=>Px# literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00022.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00022.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9e41f4941961115bc8f216bf56a900c37db496 GIT binary patch literal 846 zcmV-U1F`&xP)Z&sPFM2xJ5nNlE|!00000Oy_G=$2n*E^*9bo zMy>MIHZ|#PbqPQ7yQCb)!92lgI~0ytG@Hc^VC0;OOXvqymB>U>|H&p)xh#Bwx4u^! zz;PDD=>sWzd{A4law_cfHI2n9K%Ii%gV{QLYz;kx^?Sg~?wkO%ipPbZIIYfmLd2JB z?0`g`3^jjfvtX9jN53EqCVkJz2)T0{1G+Up2VbyrYHcPqMma_5` z6n`kBq}5g?>>QeeZ^Fw31?{``He=+~$uiiAld4~X!%-!jY`LY-bO4QFzBMv@JBu+g zFxhGlYM5_85l|)BY^ZUcnOz-kB?R@|Ny+TIldr#uvMV^-L!WTrjv-7&9;pvQcXc{3N%4B4Z-{CkX@}vdoAwxko<|JeGr=d(WW`8p9 z!AcN?R#KT{_~2GLr#F(`${%DywaT)I3R`c~PG6QzX^%QITB0gpW4EToD(OLv${J_2 zRxOE-!KocFGU7<*nF|ihqCXp&hhHGaH8_+Pz3K%(pAw&VlTHWRH~W3dwtJ@1-*?@( zhEq~~Pi``!(*f2C`k-UVkc#rsk<^?;S}Bq?xOLfe&>w>2Xqz6NWN&xDONdBfnHg!d zvKCO>ue3>O$+He+Luq!i>B$;QMy`E|Sx#4eEs_yC>kjZQiI@+l5%R&QTEjHRE-cAI z{58XxAhiq27)!~1Tyr7@Bftj$006)r=KWKiZo=%?s+J_aB>x(pya-sC=!K zSXSM{ycN(Fe6B@yw|ukRDFnT8Cz$%<-0DHF3iUzccbrZ~TE*R~T+w-R&%u1gB{P&~t`TsuQQ}{*CN5UY1y?5)`H=>FgI&TM)-XOP5EBWf;xlc9x><*o&O{&J9`h>O^^y@zqySsl8Bg4hV z^B7O|oqenDc46J=x7&TbZoBpJ{>KkZVMjdcL*z6w!%J?)X>Xn%wat3ko}1of4fTuH z9@$*xuqpAvr1gCZ*($Fw$vio46dk?ug+!J>l;Gr-vH|xN${e&)dD}nbd2+v9@un+N z+NGW=?d8{*`1+*U%s0C|m&|%&oy?oIi0f?0#FT3Z8ke|1;e`ZvKJ%}%V0`azXO1{X N)YH|^Wt~$(697H(w^jfE literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00024.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00024.png new file mode 100644 index 0000000000000000000000000000000000000000..fa031397692662561fd5332adc1546163d7269ea GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|8K2Eu z>%ym>#5zYjIRDSZty6c{?+Yhg{>6T5w-qbUbMY7QUfg*hedAB& zrp;IKf19MLy}ff?lH+sl?s;Eie6lK~&P@8RTJyR3gL*YXenQ#||BoMqAKZWTImhY9 zX@5t``cwI=`o literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00025.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00025.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4be69934787c368c2b5ed677cc7f5a2470be3b GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hpba4!+nDh2#G+&c}K^PbX0`eJS}y70`%8T>n^%dV>bk>TM}C(cF@9*Jbj^5WTF;gKGIO)y zjlJ*9*PE9W@jdm~5r5wEu#TD8y6+Pnh8_O<-8#^Bx$bnOy3REWn^jXeAFev)TXe-F zTky7j?62N_lL@yzwx7O!=&4O1W7^|)7fcr%%i5*3D%0_G;tl)cpW3Io3*7!cdXW1o sV&B=e%knGs=l(tai5cc!1_ryAe9w9}zGZ%X&;TUp>FVdQ&MBb@086r+N&o-= literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/sp-swap_with_post_conditions/00026.png b/tests_zemu/snapshots/sp-swap_with_post_conditions/00026.png new file mode 100644 index 0000000000000000000000000000000000000000..0425466580963a2bef09ca2320cb40d8843caf4e GIT binary patch literal 511 zcmVxy1gt*>D?pb7$J^uQ z6u**uQJ}E>hp-u-86aK-Z1@Wygb+dqA%qYg$1gOyHfEUU(MbRR002ovPDHLkV1hoO B;)(zO literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-contract_call_long_args/00000.png b/tests_zemu/snapshots/st-contract_call_long_args/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..f2a3613358f8db32bdc0dd1c5b08ac3429c28a9f GIT binary patch literal 8413 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 UE{GSv-xjvnTyeY%bOImz2fC5kr2qf` literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-contract_call_long_args/00001.png b/tests_zemu/snapshots/st-contract_call_long_args/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..22737bb3a785af9fc6c8023d315b7ebafb2a1393 GIT binary patch literal 19067 zcmeIaXH-*P-zFRpEJ(4?L6F`;kuFt4dhY}Xf)IKUq&Ec=q(~<~klrNp(4;q!5_*IP zk)re(I#Qj(|Gwv4>zyz2tY@D0oewklz*-!_-uvvcf9<-i--*=GQYIy)BL;y$q^c^< z^+2F&@gNXE&MgAqillZ+DF~$YO!c|Ef$yiS%o)F$D%AUaKkw@Wgn9)0*HYiAcd*aj z&mq(&;O|VfRI5@GWM4EN9Ns)(yZd{jKJn0ky`GJY5S>4!a{75gQWFD=Ih*x2z>5e3 z>Y%(u1?r%GWC8-Yy|ugsYPl9l1lqare=q(AHYEJ7v#}?xUK8U9r6!c833q4UR28aw zheU=xlE@y}=c!_o0?p6-cwUvP2ZJOUJZ58pz#Gw28&F)mJA-!lx2{dlTOaG7PDfll zSp8Hg)>@Ca&;VBt#TptGCJ&$n3qOO=ea{h`;&*DUgJwU*HC13lpw(Zyf88aNr%+VX zwSQq~I3c2Wm(VXu;W-GT51CrisyCzwFES;PkB8B&QP9e^auxb=0gJRpyNZRxfYPE@g8YTSk2?VCX$e8+&ovqW_%!({#0g#vQ*64b1ZSU4)=r?6eD6qQz0dJ15}3Q2!&}Yg~DRLcL|nl_#g0W zDv#`&2dm6JrXF-kfvM6FcM{BJLNF0M%*IDH$sHme{AVoa7H9Kz^UtNxsId*T+RcN? zo)-ax@=4{bZut?qF?oc92R$ny)j*!NqOm* znCiFOwLgbto82t5jtHe2IqF>Rcw!g)x+R5vPuEW@MiP|RQrrUVd`KbURlQGFmjWx9 zf@oqG;(BLu2z`7-y&&*Z^n3N9KZh`{o1hk{4g91IMbDaN9(xFdEaR=4m{B1GpFL^L zU(M$HWe|!2SK257Q1G>k%?LvZMT|(TxzcGD*0j<`HrwI5>h*4k*cvcB-8`#75M6- zTZwGx{x4}j^VB>1I5gluxbA{MZ^fTh0X_xPNdWS_PIw12Px_y^ShW>w;`xJ`$)8T~ z9+UZx4Bv0=`&Kkf6e`8EvE%jS(uJb23v8;J^y5BIyC2mjYU8ER1fscowldod+h_RG8vIa$u_Bn3s!tSdPMGD2oYk3Zcrh}f7!0oM25lyDJULF2aV!$gL zS~N;OyMvRhY|k3u2wn21dY!dmT2V*1;oY1rkXBfKd^WR0-CZX5YZjxLXp-es5rck0 zr;w7aYXFDApDlYW72xhm8&`q7Y&SWtKiBKpznYljdf}qSMEEWXIQxa`s{uAujSM5#pW7bhCJ=ZrroXjbtz^cP^P`nyYD}9W z4&Kg#Mr}w2v?Br?n`HF$C_{EKripR$F*@0W1a*SgLAoH~-bv7$Al@y_{pI}{$F<*MriUD_{N7R32Q^=srlt_7AFal>_1Sd={uTX6 zq~2zEzz}y7QdSPL0oJnETpqOX1EVJsP|40~-NrMxup2+(ikC^iqA0xD=Nh3_G^Xpq z`Ml!(*BIk&Vy9&5>3HNPrzjqZ@rOTGHf5SNcCJaItf?7bt*zR6V^H-&Hg4fZR?M=R z5j9|LPp0gdb{dYR9TkUyg_mk7>J(31mEL3*Mp~_p733{$O-$EST@4LB9=*sb`-4FB znTaocYMXKGCr2c7g}(H;gDBg(#pm2C5L#!*01t|)t=Krb2yUME1sn`=}2# zFzk5~=g&|BUSRTGn@@Y!64laVv}_McWU~@|%qv_1-OO3zi}DRNCSwjGiONgcQnkW{ zEDJA5J-uwpZNV~$#35r&(u}Kh!Ey1d3NFX*Q;4FQqs~zqRIZ#P-KuyJxy(&iL$_S< zct<*655I#kr%hE{G!{~C&^)3a{Tr*DaW~M)_-Nc~=GUv7_9Qm<^tMmL;`*-_oiG#% zX`zKfTHxNjTNn3?sK8SgVD+-FWSTKr^6 zM0W^#w~)*_!5qsF#ki~+&bxi?O<-VPP|%il^T^0ZWu*W*XkM1Iy9%s6@MR9~(>&AL z8zJ^rDkE39FCn-7tZN{YvbXwtO^Pv&iHRwqI~R%c5tct$dt*DIsvqn2fhus`B>9|n zg}k{UgYKtW$+{`Dr0h$w4!n?oWY|LbE@4Q0qI@am#XUt`L&N47t+U5EY7gUjFM{3L zzwY{qSUVw#PEJovU8xRbpT(L?^FwA|(4!RRSK~L>qVl9iIC}!MiJhtp6wcJNxcOVI zC$*$_Aj0usWibI1Qh&$Q+Rvi4SOAL(c=UVqYxKc;9Opch*4F-tUP-_8=k#n_(ZQ-R zHdPc@m|8F$+H!u+boPky%t>DiqONjbV39UUZ7zWu-j7aSA>t;E`$ z#uW)!vmdnxE#=qb^|u;br1}&>hc^|BpU{+TOkarB%=Jr;@a4{iD$LCT_bn%PvsUXFn@N~tJ zbUCjd4P|)l43}WzjH}Nz`nPH&y23-K<5&^4;#n(5geon&LR`F!DsJu*wex%`ES-IO z*FmHFx*V5!)2GTp(wrZIVsjx#q*gIz%`@@A`kotxN#l)#zVx7(V$t>DT3U)9?~>Db?= zx&?+xr<%1PCirmD?XAT2);(2|*_1m$EO5gqs!i$?#_HLfTj?_}9QVmn)PtG(zSW}< zus83FoSO^D1ngkNQVmmi&yOBTi-=Kz(;vkyOpHaVl@?%OvZpo!b1Av%$8a#d{%E}X%K4o!QG#iM z@Ap<;w2^p~+vsF^Kpcpk{5Yf<5$S=dsUefSunJt`lZPw|H!+u}wol@F0S)PmSt%p1|N;tb?Y!c)} z6=Pg)BHy@Z)+3WSGF-pD$^5Dz__^+)Z|TEh=2x`5jkRdK;lzqh7X)8cSc-@z8@lbW z+Y1eU9xM5bZnxq}uQH8GAEIcW2vHbmTBv6K`kHX#?Ci|DxnHxAhK|$J9GgF44~OZy zp`O?*j29#Yh-|{6g>Z^BGyEy(*c3e2B)^7g?t1Yu33qIPkCUK3$#N#suRs3^IET8} zy0i0Dl0~IwRy1uA6?4}lb2PaXAA>7NYm+t>PDo;b5~5RLc`ulE#*(EgnfT)C*#M_qFoh{70oREm~Ybd`p)vxs=%IOMJv$Y zJdxAwYamO;|4cIZPcGU$5S{J7$$jZFPW5c>fH~k>#m1taa&39$*~|H*sf?mu(;TWo zYj=4D)C2fNnW5Vm>|++tg9h*DpZF}JSlEbwWJXpJWIJ&ZPiI9ljpN!7j*^aX8lQRz z#|f3_FM2_GAW+1x^B=a}1%~qDSjO(KT_duUzF& z&Yr2y(X-7BxS^KXCC2GE*5o5gyyBMO$GpDHhdw=!wrl56p`w-g4BEP^@LN<#Z2c`; zDRvb9jEcLc;!ll62dBB7!VN+|> zVnMYM%$kVmtANK_kP{^l%^KWR1-3NErd5sEsm`8Ptgeb60`s};ESP6#?v=yKw7FQu z)<(f*hF1<^p|*bM@6kTE+OEaNfy)i3MTuCL%#d2}Unijhv9G~gwHGmFXiXZKYx4Tq zTey#8JxTR%j~MvZl2yqY^WRToG*oPiy?$*hV51tH)v+83d(wFJCPi@6BH+ZAlr&Q! z7;(SP5p!FdKLUngOOGo$O9(k^^U96sBCMnwVz9_c44GpWE#l zm8TM%)>P8c^1EQF)z1^!8wdA0rt*&JcWubfSHC&DB5YiQMEW(jDly~g>~EXhrWzu} z%$;W)bj?j)&^0jG8rWKSudUIHOF{gG+!Bi%uEIWv=&L@(XT=S(t_`XY&&M3P4}2i- zb9+Xzn_8H&=z*b_JbQb8=GcV|a<{e;>1eM?w6k}yeHAK6*wYoJ9DgBt#uNKqx>#|4 z%3g&=F~J}r_dw|5dBA#l$=u8D%fCf4k~8Nl&ZHlu&dZ9csl5J{H9mHkYOP9_*v#;7 zpgtTv52U)T;%9>i>OBS4DjRbX5$~w*DXeg$7Z>#KkjXO7}do#-Z;Cnb(SE3|^OLKa7msatfT&O0-z>t0DW3HcB zdAf+*>F)0C;b9$aOIA(}$W(0qE_y?Iz2?(x?#X#~Q(|q%eU|LNns=ZHC zL)K(JscUtZ<47$6B8yH==|lw;$2$TQmyR z=`RYZDUFnU2t2ZNf(I~b+mC6~)87Y%!k5_7`uzAG8PdbFvG7a)veS=TNCWl;}Jcv)AF<4pS@8gz^-LSYtVN3$p&( z(X_mzszMQ}GZk1TC>FbMxa<4MSWI()2F;V}Fi?K+<<3y)R3=M=u1BynpHcenG=siL zK1A;_ryRASJYyabSrCt2J)*U^5lnS*%>{SlD{W-BBt*HI6_np7SV$o?Y`^YusGe4X z?Ohmi@B36#LN#?a{MVuX#p!9D5T6r`M!JsLSlqRl#Uh9BE)D`aHYK9Lsrg7;qU17*xk*)ZKlo4fV`RR$KL2A z|K<9ZoR6!Tq{If5+gTSFQB0;$aBN!o&9vs--aUlmlhs*n_%x#Q1D5W-T4bsht|?v> zuw$S;-|x0?F=a8C`x`afG) z>}sZnmrG&U{jwE~l{scqoQFaSsYA11$j45rM}`hX_h(5ijxE{QWVRW4zzLi#M5gv z33C|6#EV-gdEeP@G2WN#sjgqXF4rAVSk5MDcR$PMgF4{w_X*LT9@K3zTb~THEX4IH z416r%zEkt&uT*QEiw06N_;|RopW1qMTbJT@86eH* z1x07%P`2q*6=*ci%}!}E09tM-#-JU(l!a2oo#k$GwHFZVz4pbY#FZYibv3759s@oy*Caq+jY45_6oOHCxvBNXKcT|u9Hd9(qwI)q*%wtG za%Xy##q~e=6GGgo75W#w@#pl9=oKSU%v|xGEkDk(Z0WFo*fL0NYZoU;zY@{ZPrS`Y zz*Ts3*6Mv~be9kY8J03W@@V|xTryi<4(o%nMV`1|y*y$TWNpV{J>r)L<;<#_?sMbm zT|yZZb+KN1t0(_te>S3tY`KZB6T0b>O0^P;1s~5JDiJB#GOWsQf#a+Z6gYN)D=Jyf z(9oS1m`mD};O*b)ruXbjqOT8_-*k)CsL&a?GoVwaTB1&dzkEu2ISu56Q^)Og)gL(+ zWrCiU)}N~lH2BReT56sd1;eIa%zdklfd@?BM3Y?WX1Wrg&a)b4ka|#{+haBc88$5h z<9TjiNmSmSERP#ZR*atZ_i3adRkb2}L#b3R-IUY`E?a!;oo7oe#3$o-4yW}M^2MSp z`}rBiSpyV6CQr&jz6qSS92Id#v7E?fq_DQ{tzHXl1#&goZ6bLc!-<%e#++y&#@PM@ zI`Y-%b!Xoof0or3pN_Otq=N;&)o?V=3}jBv1m zRf%N)#(sTx`X^k2^D@=uLy|+7a=MeJ0sqZ#Aq^{@T4EqSz^onY?sggq6^mZ`Bd{@i z-=li3FfZZ5QL~I>$%=%!%IgFVk9EKUMK%g0o3xRSWV0t9ca}K{cwD;LpE|FO+b%)a zmkb`hvDbQZ1P6P)sPAGQpDCkHg3;zFg}fK#1Fz+=s7GX7ZXB9o4-fr=q!~R_ganjo zQw2#HZC)GnS*-Z&$L&9=q{Y;`7#ae2+IYj(7m+y9af#T7-`0hpJM4>fKU~)zQlh+s zCFNB5LVo>v^{W5(GhBVEa2n`5m68v9vOz~u30b%q#HACRW@8ofm%fTeACWEB+l3Nt z`qopnzKWoP%hh+8m z_{s>FhKONR+k1+Ew;E!!e+vB@E!kCn=NZNIb~Dmdbnbl>2*j`A%{(zW-*S~8ZFx5x z5-mw5zmwS8{?!aY()IKMjlhCkTG^R-BCiAOUL%jak&Zi2o?2m=xJhM$=6<6vLfGJt>?ps6&YbSCS*?KZ-|?0a;*7e*Ru4!gL93} zQRE2L5tfTw(o<0h0!Mc-L$CniLFMLEsys~wKyX9(I8BW@1RG1MnoWHswbs~A_8aBQ5wa|5SZK1LA$vZ=VrRR|c)AFCM^<-wOh zk1M^KAC?ZD1ZG+7y|eoKktu@sF}}Y`cYpOp6zatwr70BqFi!b$6qSGd54udiq&9%$ zBB;?Eu)d?Si(jvP;E(mn7lo$1#-f7Snu8c4y5(_+2i7#vrG4hQ^NG&mw#e2PZ+i+w zy_(M<%}hYuQuvN^OOx|6;u?Nr`DV$D zA2FmPRXrk)|IEyP_Wv(p5C6x&{XbzOy9ZY88yQj($|H*43Xi!zF5U71fmUI#JEbnT zA_oAk)d{WG08%Z4?aT%N=#l`4jLj9S!hk}<$cC562qWTxb2X3v&AXu@EfsYs&i^2b z@{$22A0WltnkyD6n=14HdR+Y>5(v| z*A61?Sg&G?DmP`g6+^E(gR*WxG7oysqcLrb+nqwuodM%%gAp-RgK!kH-A*#hvvI*W zrWTQ>&Juw-kj^iyh~)2vTP3nx6}(=u*;|ol)MgWZ6pKSFG*~6^`3+S-)DUh3#R^Fc zX%#sPFlA|R)@Z14mp)I8T}Y#Ve?|^eFN5CNp{(Y)J|g?xRkJza;G2(JcKR0NG1MGA z@BgN3^LZ$y!=-%on~aCKraxvtB(iEh`H251AgO9^PQZGlZ&(fmp0qAS??S?j@Noft zT{VZX8-%JOY<0xJHp7qI6WJ8%2!MICr^`b^3lK$*hiLETTL?$UenJ|3f_;Y#vqyAm zw2FW%rLx#e+!>OT`w!YME3Ki5xrV|75_~XVbA*mJ`>USOzZGBfJF|j8CZ+UPIa6sb zUNxHAC%S%95@Fy#ru2v4*+R$LIg+>w`BU#GT5JAm$Y0$r`_f^-Su0Nz3z_1SvuN31 z)o$gmcDPZIUeux<&m(A)i`o9TGbI6N_FeI|gxW8BYc^0OdsCG^UG^QG+J04|fp8q$ zH}^m0hA{N*jn`@@M{^K?T0Q}ikvYfMm`y;CVdUwH8TF{uX!3NkV$^uI#h|A)-axw$w1>!pbqrM)YEmrXS^tOf+CnbN5ui@5%9W^mN6 z5bv!;4(gy5qrLA9ZNP1b)V(B&=mxyr?T$;xw0`bMyW0b{2{%+MqCJ`A3qy$Jtnkp9Bmz;BMqiL^X5W_~Hl;OXk*sp`0 zzU>(Sf#OW`t1Jz#fy7|Echt$q0c@MH9#!SrR7IV-dJ_a1HJR%2h%tT@6AUP{`UgUL z2y7tUtYM1P*-W60On|WFZ>AkDLn8mUUFoxc3xLpsk#hVpk4_U)72p5S9t5&XKD4_H z37@W?+4A;is&YU8++-0U2t++OhmpBrF8X5}aYw)=93|9sEC2#4!C;*b;bE+i5> z_s!ioi|9f`t2jw-Jy2GFd(oqDr?JY4hC?+kv&py7++5_broNiS8}dv6^+HA6WVT4X zb&tl;-CA`7=xsZYu)5$(EwI4Y>?WERuEIPnM9={s{W3IkD0f0|MCIji*$4qzDhDf? zz3Lxo+>lW4CyI}4K)!xetv@oEA3^o^k0>aQw~w|sA~ zLy|6^yD+wwmEP5zK|LcnF}?Q%r|Nw|`K%SdXK8Y7e~4cA;($ORZN&*el~d2F z650H6#nR&`t&!nUBHuL=pYss)Pp)~cH^ovaV=~c8&ti)$B6H==L0iC;3T(0z9LpWREIM|d_bR9X+B5pBn4KW==OX)^GD~;aOqS93 zTWEL?nWq?7qd;GJByGjd?e~1KBIsPy!qy5Vw+vheAB{B~> zCQY>`UwJ|mvp9&m5;5;p6T#s0Um?ttvJ}lvQ^PDn+WR>ao=rpq_J+62pEJiD{?s?+ z5w4;A3n1W7Y?%&4^ebsb)pj_m^;h%2*Q4N_n^Qbxovw$Y=x>uzCzS0Ux4E;gH~-+a zkmsJLFOTU)e2h^mnVHB8J4H;woA@2iRW_spzReJ~1qG)K30B+T6 zC2M@RAR!-~mS-4YOLZr2ut|~-NHc@J=<+j`Y!LLZ9(k|bl`}p z{h*~!&0xI?_q)7?Km>Vac`+0_Mp-C!7~cLG7W#2W2{a4G-lDqs#<9W^;lE%~pvuj+ z(_(>NS$vnL?HfjT`=e5SWkHZvqxolo8rB+L!OtK4)?P%NCuUdPFTD1)xMeUx(MnmQ z=i4{3){hi(BCJbyZOTP7^ZD{sG0EZ9z|mgFNMsv>^Nt${itzbLFmPSwoP{7CkMt;o zK;>WPNPQ$$Em@*q6A%2h1lq|=f#f5v!!Z$URLNFvM}dPW z1(85>u4McIw}1QNoc4G@lBfa>xEE%7#FeLD)KbpqI8Mo%%wCksLC85&WV$3j|_pYt;r4CU{BbvLJYf6hbFy>U43x2ul;R3^t3v+yUly_q4K^TG&W3NYxX z-k`pIBG4bHGHw$qnyir(+}5&hjCO@or$MH#7tez_awM& z0A~17qB6$QE+Tb?#acP7y?F3C$mka=wCCPVr^#LEt1$dlZrJP!-L6F50Clid{hvm0z~6W9@__+By%&hd9hEC7|F1aw=94io zoFtm*|B1s_7mO0wqGwf9c2h@p zqjbkb0EOP*=Xw`8IXMS8+QvEnU-N>px&lJfmz~6+ITcQgg{ZZ`fqjM*9S|t=ip;`o z8DZ-h2_*qa?Qpue0eBSTd%H#}_CQL))h$S}An{G`F6fcpMZC^^#d~=Q*FXv_J@I!z zAoKqXn(lDY5q4)>{Z%LqeUuZXo5VJ??eXXqP)_lus^2Aqz{@je-uhTR=+sjKT)JLQ ztxG_o`M5|>taF_UJy0da!Gb(Qll3$)5?N_7+>e3m{WNsq3S{y88F*FK+?3DxSD}SO zChM8~Eog8tgTt=$(9ZtM0?2C}l~zHWEOqNa>ZM4>s{&3UR<#e%sRHRzv{EP_)tIJ$ zz`dZ#*4-As3KD)C#_IogsPqQY-kQ%>n5^!SqNi3O5nG4$f)*!xFbn`eYC>>h(}eWF zF|p3Tqg&>|AP#o2aJ;sqOPvt`ZW^6*tqNs1c4kSt3xjw|GuDYWZZx65OA)#hg$_J( zyoKM_JXyHE-{(~AGA_`iv3tTmc4ZKsRvN)ui^^jqL|n8c~(a+x0DzwbOf0_?-Yj7xJi;Pj7EE*9{R)7`=J#$otq-#Fn{pr1t4f zrTjg@&Rt)&nrCg#zzEc^K@t)DlmKb(mwa`-|C%okrqE5Q?_5nJn`K1?^X(zDQsMAm|*(b|7e>gaoz9xBDLlfdD9 z^XR4=$G)zq`0vF1`=7R`j}hRKw|>0-nVQ>?wELGj+UdX57vxc|*B&^wEzd?ReBmPI z4*h3%rZrjBs#R|ML*9g*g4XlaV2F2jGq$QB5#Ct_{;9W;$JN*3QP#gsDOjVeHaH=O zk1J$2jo%VAav2K6>`8K5e~Ma;e}#PY>LuDqu%y<|9tSVGucZDo+nM^Zser(pp{7un zwVH@0A~3r3g}Y2X0Oo$sOT0F*G4G>sf*jI{W}N=)lfCon@K_Sb*IN5^ zlvRRjN<&{tV?}e*&FK_x$bCzFqPm_&0f z0{X6tb1_Zf1EKip4(q3T{?ZqJmq zh?od(42Iyrs3hd$d;-K@+)rj}$Cr1$>lb05+&~J#MHemGXwJVZ2oDbk`SRrIi3Wc6 z+FDI{6;bAYnxTAmGoB~vSv1ks$856Dr%Fxx$a{RtQoy}{qn^nw9WX-^WCY;PnkoQs zXvl|8IgX=d$es@fuOgM>N4ILz@UxBwLL~&Pof}XryXrGm*Quw+U*TugcA0V_CAFYVxo+!6)gQ#gY=DYv%lcZ61b#-6tW}htg8Rkd9GyaupP{k`Xetn<0CH1Nj-#o@URND62cy`!9v8E~hb@!(d9!}ZW zyb%1Ms3HB9Z_GZ zuVu#dlTuBh5|O%kK5S)VK|)MemXTa*)M<%D3dMR>usLD}>wJlYx}CvLSM&^m*<@~R z&N-i5wTo%eYsfF+)9HB4=b-nSz|AG0+TQ`_LR22@)I%a(w9q~ezo}oVMTGyYt5tHs z-rVNB8H?IdxMu>Wtd)W8gTe%NcGJW7hf@hbdPk{1q*1*NG#nTk*14V#_SV0*vJbW= z=ZDGVQRPPc_wj)^SEP6{x3K$Xch_Bl0f{s%t%G8BKQ5b1d1aP`u{YOVgQZ_>^mf*T zVOcx8ii?=<&%8$?(5X`S&j+*i)k8S0`&Y-C8e#R>AP4U!p;u#DRQ3P1GnKLa*34Tt zfcgnYu4h~g%7G#{wBDr@d3t*KJH(Tr_Xudm=@76k?HSRfpag(XpmjwPW6n=qqVsQ+ zurYdl0APLuUJSngpGQ9R26kKEM_@oYn`%@ZpxFlGnt`(F$Fo55f%jU0kXr+8^kKF! z2OxAnwabm*$azT==y=q~jUjM_HR~`oRUmo+!gq^Ggz2Fc_0hOgO7y??A?hDNF0Hbh zIe%)djd<9`Ap$lv3Vr=4@F8MA5t#N!b?QYIBD63W8C+HT^JQK#y7og(Od#f`-M>$v zlZm@Stoej<+;1k+&V?@`#nfwIOpeJgD~hYtXb)W8H?mOgbEzp~Pi`vWyY>Q5dAzjC zo~_eG1^6Ey%l~VN?2&LB`m1|j^Gq$FsYVIhGS{+yVg;Zyhw2y0$zy`P{PS#;j#g?e zWAhPq{8vOXMnp7BT64&P%Vh4`Ka9LAEU&P0j{hz~%0vm{e$E)Y;!7#4j`iBU*}FUGoaE6T(`v}_8DN9kd&W%K zBe%Sr7^iK~yHS0z0st1#>bD>PFyZ{hBm03WGvgv&bD?{H-+(6-mH6d_lohN0LZzFt zZ+&&+Lh zrYN%^Np}+2)v2qCR?;<~=sEOnwWw6o?K_GUBmPp=X4xNM7*Hp&pX>83baNjC^fz2i z8a(j(_A`F6uYp%nfB*jUT{jhRzMD(aID5J8`YgR+dry<<$R3ZypW4Ub|71PawYj8G zsSZfWzi6=y>ioUE7PM(Icii>_*uv((h@qDJ+Xb;EWyQS<%%Y{n-Y1j~J&yZ)d_RXP ztnl1Z7_U#T-2E`(oM5nG@nXWBKrj+OBpKPH7WorcDQsTwO1%+f6W<#e3tlgzAS)rU z7N4}yRmgkYJmdSB-APDfw8k80oI07H3WbSRF3!*h<(T}gn+~M~yzKe3Ntypt?{r4w zW=##&3ra!sM8|)B;Bo$uWB>6_*!|JG4D;`wcMg9G@g#?*6*3D~%trULoYr5G2z~-l zO?nuSF{D^YDL5>Cc+2V;A7th2?MzN|`RcpgT|(2Gq?ja+NczO2m!_hBUJPL>lM^`& z$T}M(5d8oMILf3gAyK)}ghZ~oxp0JRSQ=@tnC%WKJbA+luzxX2HEau67=oktAnzkx zfPRo0e0x0@!=U}ScC~0Ss@~=J>;m8m0X7_vHJzWIpPs(FEtrruno+hP+4l9pFh)94 z>p+=8QK9;d^De;ZY1%YbNHLHd_$0F3En5N#-MwSXtoXUsKm!?I5ln?(_25(yb$N?v z8M@%lbmLlONXG_TdN|Pj@DqQmz+S_DKny=0WxRNPW9Dvs{e_^T#jbJLeDloql{yaS z1>N-p7EwTdUoqi8H*~73QAAnxrm(Y@O?Kvt7DmLGd(p4r_HXIVsD&RDX+Wi_naT#> zVzoa$v;(T%arRz-`4<|iFE=tf-ko=Cpg-jyQCL%B>gs7>0YrR;hA;?Ep-5(73svj& zq>kS!FUUv-R^6gFX0}cB&Q!|n>302FC%uANEtukN(zEI*v3s+HFVqN!RtM1DvYx4&Phy#+d$Qz-altx#Hl|@ks$r;{(j2XrpFP ziKg4}L5G_thG3xn{Jha*Ots+$D!3R%?1uq)8k6x_a& z2P6{gGH(i>^raevof|2<*qsAh%0il9Os0{C^q0f)M^2-k{n#(e0lL~*h|i#)eX8W9 zZ4HVX?LHo4Ps{{7_S7^-ShnAyo94-9>8o+7k!pGnoGLH^b~`$`)(=i;F5 zu=k;&*1R+&$m!(=?+#q7=EjzsQ462NB9nkRw+JzZ^?=%BCj^auor({cG*hYcnY)yA z(%NNH9T%C9t;Ivs(q0pJ-+|>?YKm6Yn*aO(Mg!ec#jKVVe0HS@T$>oZ{ESf6v+tWp zRFkIb^ItyLe5ba~?t86U>egMsFcawsDB-3YM%be$9qWkcvjCA=-3gU$izuoxD~J#1 zKe@cpVimzZF);*P56~XU^<_`Zc-q&JPe0Fhugq_m@-@Ju!vNC8IjoN5iY2EDS5|+} zRB@;K)wdf;zy_RoEH=I~54mcf__REb!EC=k=-A_37xcgvS1C6>%URQC8S+Bu3b%`W z2Oilkr)IwXXbNbb*g3n^y%XGCSvP<0t?JXN4u&i_S)xZB!2swO_rC!F`ak6L0pWiM z7Ys^~H`;2LQnR=Nh5^LtN_rMBnfqZNtvUPhM}@ zo~Q#w0|guR;kqese77GZ3> zGUW-y)^7>utOF<3b`LGOAt%rxhVhzN@^~yq-Ys|~?XyiazY0twp^r2%O%*G~_cS6V z{*gz{{<_2@DOCc*lq&EdftIoN0KlX^aS}+@{YoTN59vTR00g!vaVH z&ZXb1@m<4Ra3Mv%nt(e4)=LI|LsV1YjkAl*?k%~fJaNB1i|8UFfH+=iD0D!emsqwk z>s|7>c%oh&IwhFCw^A7?SI41I-?PSx91_|3QO<|!nt(bEw{=8@I0O=tViz1x0pYg9 z7J3Co_Ui#G&@anPSG?%TO{_(kwSawhm~`vs)xk_f@DP z4t*O)Hf|Z2$EBJGye+|Ec%nCaTR`|DVb~kxSa$|vLq(%sQn!qD7!ilwTF0vqSN;Fi z7kX->erKy887tGCBe?o49ks3QijClqY%fN93D9CW+MQ2Y>DwnZVQuN>Y=f7Qz0Fos z)XM|Fi?isJWtwp?a>6Na#|!$V9f8|YN{P(tJBPEIm##1Djt2Yn;n;y3A**QZdy4{h zK9^+n$TGVK(3+N)fx17kId^t3Txm|B=;m?r!~V(70N&x1*N7sN0-rQvob-r3KwLK9 zK0f&Fl}SgTXe9to)N~wn0<_NOM&VYz?Q_}QYYjD38vbwcQuMO3v!{Q)#MJ{tzo+EX zoquk`wE?3yPSMHqsi0xMzMe7x2Elhk6{{(!=S0dCQfOLW&g=A$K)UqI-ln6_T}Zv! zl&BB;O+Ovq&%0G7-T-va-8445Os?)_*2Lhp0Dz&e5b(X+kjnQ6^=;KIn7NRUIWC&H` ziuxVgp0SLRn(I&f0daG&s&fH?=9=5-R$jZG+WWlHRb?<*h)Om(VJWKt$#Z!K{PjxT z^J(QtDgBV7u0&jNJs_rIgX}A{h`YI(k&byiJj_wI8#8}R6FwctB173Z(k)m?cW^V^ zO(aqkmdN+F{&EzU3NNbuIr;R@pVbRBSuO@>p^S`8NRm(B>iuoMsbTChmLKjLJx(Wt z1E>S7^3ZIZ60Ruo<@wd>wTC|o9n?JP3xp27FZuCv@~U^y@deq?MCh z--44}V?}s7y&I=V84<;IYQk%zn*k35B402Kp+n!>^=M_SP{?apcOQ$Re)!0We)3&a zz11DhLIW518Q90Y9{P-HcAq(!wUhSv^$k3`3B}{5Z}x>c7Ir0SKO-wPa+Pgr!<6?? z35r=nD@x~2?AiLFKh2rfa8abU=<4%6IbhpaZ>K$s1Q>C;Xo?$7X>MjYB@?ehRp!*I z*ns}$v@@U!*4o-bjOefb?}zRq=ulX=d`$$UwL%y5P#$+GkncnWJTyH2He7oD3>(l6 zWqF^mcfXE!R&X5JbxD*}#cIM~f0AX>fSXdN{<)8etSDr|;C-c!wgq?X5*U4+xc!j@ zPz_T=>dJ}1?VR+l7LeRt%l-{Dzac**isIA8dp;8umZ|JKnhguviOm`z^~__5qxRQ6Cu;TC5kVD)N%>josqmv{3iE@ z?#UD2TnL$E9DHz68AWd9xDBt=wdj>C!;L65}0 z%D6G~Qq+Ny#s=TkKYZwwb^bVTrI0dXFWehm_EfyXo|(pWN)P9@j8IPnFDJUAE6lCKLlQxS3@#)p-~(OwL>y|&Rx z0AkmBbFaVURcFm&klpQ>>OSe-x{(?twf#qz|pT`{b)(V?$zXUe>gUU^b+RdsKib+dir=B~e*NZw#bt8XQcJ(~up8rj;3X`y n|LGpp|7f88UlwO||Gh2@M$HWAYMlV`B9N-0*7J&ImZAR*%76%_ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-contract_call_long_args/00002.png b/tests_zemu/snapshots/st-contract_call_long_args/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..16c3a4f4130bf43150696bd07f548ed911570cef GIT binary patch literal 19917 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�BB%wS3(_ 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 b{}Ue-eOI}=#VrdsRLkJ$>gTe~DWM4f**xX} literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-contract_call_long_args/00003.png b/tests_zemu/snapshots/st-contract_call_long_args/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..bc70e7ece3ed4887c5bb7c803e072c8c74a49635 GIT binary patch literal 20213 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 R7r3;L!PC{xWt~$(69D`q+q?h( literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-contract_call_long_args/00004.png b/tests_zemu/snapshots/st-contract_call_long_args/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..199c3ff5f13bb228f8914b671f586fbc9ffa11b3 GIT binary patch literal 6377 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-contract_call_long_args/00006.png b/tests_zemu/snapshots/st-contract_call_long_args/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..dfbde52bcca0f7d0b98c71462549ad7a1392b5ca GIT binary patch literal 11174 zcmeHtXH=70w=Mz-N)?eVpi(8$l@6lPyMPoSfHdg}7-~RJVS^NDp#~Hw5_%IM5D*Zg zZ)pKyh=>p&2~`Lol=HIp`NsWm&iL*)<(_fJ9XEe6#+$6Q-Zj@;^LgeoXM(w@9?Lnt zb2KzGEC%{_@6phldQC$^`-YJgc%o|7UP(hEV4V&eDgm#eRWCzniDKr>u2O9lP6c>7+5x zydocKI?~Yayy~KTb0+5WEf!j)XMFTrG&dMQG~VpCG?T)0H1D;YPnkdePyb;LSI$K9 z-Fi#CQ!Tj$oz7v~Mdryc?`Z_7cQS%*b)X9PGBiiqm;2qtxMNOB>_#4b$^8s6KWc26 zxl%`yMSPzpcYnCpjbilbIxUm=vW~^lYf+i&AAq6BAp+cn>E=cXAd?I-J=={(T4=Pj!CK5yFQ{HFM|TGU9Q2VcCM`Z-I=Q+ zxjN3LjGA5;1%`BJH8O&npIDV-g$8*5e{Ya5l-e8}zEbz>G=(TpF5dBWgPyBSIT2y= z!|$|M-Lq12G*44Uxr@H@saJ1Qt9$w7|J9I@^W0Xoy_HgSf7|kV52`F&6l^~LZ0W?D zMZZ6+T2CliTW7h?Dvng5ciIfOVopbPs*fEXQpwxfjrP??ht%>Abq(O@a0J4}WP%7$ zqh?_J$*bYhudV^pZYRciG1&U2tqzg6}LRT+-d-kXv zWJDR;a1hcvSwPH3@V#hmmwjlt8nEpyDP8AW!H^8i4-KHy{>9Bu;z9MwL0(JT4eBFM z-ixkm*|&?6b%PDx{97Q=k?iz#u-RF+C=A-KlYO#|W+$(VLZPU@O}E}%QgyfcP%Ah% zbqk4bmtPB39k^AE&fY&y&-La(Azn*MODsKIq+V^Z1yg;{Pd*eeNEea2uD2~Uwmph( zZeDwidlrG_m3~Uhc&=q2(?nn=y-Zp$idXM>9yUh9cGJc|7=uj7^fN9Sxebcmq}SX z@lIPbQ2om$x4%c^ST$VKxm;UZ=cI6+{!V;Z(N93w2m-P8Ja8e}Yb)G3n!=ZWW9PgKM5?`5!|BS(lb=EHtHa@U z?8AU~b8A(e@K?AwZE^T3Q;D;%ix#Hi*t4OLtPRAHSMMYm=X39$49Q3w4iEZkh^<&7 z7tez-tAMrOt98$oORddF}Qdts%uNdug8o9y60G(tJH4x#*IlF5nA2sNlWAIT$?2h-cE!`P5*$_y-u5b!-={m3Kc(Nv}aUd1UEs z761{S3pPvHdQF@{X2y#R*=?VNL+=O){>pdqFy#eytx@oi_kt~xnFIrHt*<+}D4tpT zFQdwT9hd&!oFVxb+D2nraC}6qUAJk$m{3>W@ZIlNv_;@Yn?z6US3&~wcvHgzj7 zg1%|@un%cFFQ8iGU#(s&yz9JRqA#VM+SM%q44|jy>I)YG2Dot1bAeNux*Zrn#nw(e+CW6A=3 z1NQ!<-Ro(Ht~^uE-vfW`Bmx6xE8JXYVqW^!8dV~hE;s%e|MzmNwKZU@BWD&U_)6XP za5H0k z6NDKxA0Rdn2=BbUZFL;^;zj;-ZD(j|u>^pSb}*9DY3*TP)h(c~1 z3z&P6G%M_-*g`gdVEH3u3f1akl?d;~St6M_isRC$$B-aMM;v|EZS$V}Gt|SQQ1v{a zcM|D?nTl*CiI-CQg&BV+Lp)>>e*~+B0r>oB;c=)8;6JMJx(S489PGu_F$Nd<2D9$6x?iYv~AQ->rd zeO8ScbRimw<|Is`kn&mPjmqE%aRYkK$i3ub!DqCDgBry&SN(w z?2puU;?Ns3 zVai}^%6keuSB+T3<2?@&>l`NQnvf3CyWDd%ye!H^V*u-#d{#0Bo_y*j)`;wKkBM1qu-R0}J|GBO<&b{_mV5_oJgN(nfh1;s79W2*@sps)Q;V1d? zwm4w}4*a?~r;b-%iZ4U%ER`=y45T_nLEWu$U3;vo95mb6%+@{H)qn}dZ->2MCdK{S z3D0t(pv-#A)o2MuC0?sf&&CQHq(icLAxd@rEe{;g0Ee5B?wRy2m^JwWaG+85y!~wK z>1kGwTJ=6FI>xOX>yIX6z29f0pC$v0iiCijk8{BpsEO5`nHiBo%7$2$)es0W+ix$} zx{j|-I}P<@znwUY_@cZ6c#URJhKLuN&>@AATWNy=8Sx6?Lhht$SQW1e>b7>+1)Dxr z7c|k@UwF*J19w*aJlJqRUdKU@?jL7EisN=ZueSN8>O4{+=uX#_G)9JQWafTsoV%gx zbnPj`ah3=UyK~0n$?IqqZ(H0j`A|8f7F~($amPJXzBi#*IR*G{0YFe5-(shS8^|F? zJg%m~SAtp{SmU27yl6%s)W=#dB=6>jwmsa!bw@9hQ%pvdVm_p6&=~R++QAI;j&{OH z0^F)Y@2a|Gn|!?UM?6CJMGQ)ujOS7zp;_)>ArO#I%knP|HZBssxioRJG~>RD*80L@ zW#-=m46*J#Vm0RAT+c?N=1^cseidj4pwlfhfi9C(;Yh3@Wl4H7ZK)qP)3zHXjTq9; zjhu$y5LDs+U)xFq6X>sR^wLOdXKEYu}HTt zqjdIAXY_H&Yv>r$b1ucRPaCPJ#(~XQ?p`=H^#I=ewRXAsKvlTv9g`Z_H8K^6mL9`5 zQlgOxMhJ__DZp9FgCK&<2SDPvLtGy7ZeEQPc@BN&gltfVR4P8i>~=Hw%LdQ6n-0z> z%tP~H*QvW-_8ppNz2d&aYNV6pELV4tNC>^!s ziGZga%zbv@@#~#ApAZ-^xbpLpNM(V7`tze1f@cb+okP0RuFjD}(rdyc-yTw2dmh$H z&`&EpE<}!(D^%Y_&bj06`n7x!&}N@`TC|%UFLSzSeU6v03UhqPcS)eFC*qm-a3ljQ zA)>@9lAxg1Pwl;~-e?_|yAphwu(QXK8FZB~7Wv8~{jNv5gLEzKkB~L*WOw;J%9Qjbur0Cl04=9BHxLdIAl>}>* zxV1Hqr&xWxG=4)&!->>d0{K&Av98Puf#A!rf%%#d!@y2A+{Sz1jS(7{UtwT7SRwwj z_Mb|haz@gwXw*Sw2cSMJc)vW|sL1bxjWxezI;l3KnJUwUtx3>u$WM)sUg@-XO^_bU zy%1jwL^0f)2CeB7$RHgh38c?6dT~}4bYa&`Eb)&MiodLUdA(yufg2WEcK3^YXn7yN zPiTWcOnKr+g=NTmAVkdRq`{ZGqw)F$eAjE0!qm(%pT?>d?6^us4SqEXf9VbAHKN7Mx@M zSi`z|fglNu6$VrR9g8pTi)EQh$K|{(FV(Kv;M!ERoNCeK6BQEY)ZU7js2dMXgvkf< zwW?%H&$k-6^A|awE{i`d#FIMB8WKJ4D@GLspP9yL6)ZAo4V_0CM@!WS0`LeV*CoJ; z{fl3>+eHjm<9o1SX5|x`p-pT~LFyfKy%&3+nv7&=ajh+5U;eZTUp zx-35-TC5y(g?ib=qz3j=d*n>rlIff-#n=hk@e>f`B`tY?DL~0fR zpt?>a`P0TTqs%6(So4ta@2o`UiiU93<&ttEB{RRq~?`VckwlWW{b$27NWaW34ywHp|Tq=Eq;b=HX=49vNhZQa?&}o~E>< zZ{a!uaVnVuL?ut#o}7y&bK;i$F0;6~y>2bw9t*@g)vELFbafm4xG;Ko3%=S0lkAag z!uu5!d30o)sZGt@+l?svGF6Q7^G&@GkQyx1sd5`8Y;%aev@$ZhKY3qVq1wZ2Vkc;5 zc~y9iNf1SLJhRN4BwKaDM#ULvRjlKLx@5h6Fnoh@bYVxl%(S9XS+uHMbhkAJoL4nB z3nT1%zH~>=PVg~Sl|Gh#)Rz!b`^ozDKcr|bxAE^46<4dD$#iwRFp{gdlQ=JRU;?Op z{~QR-xoq9-jt)*fkt2z+7oA4*%O?y9(fcNurvaziVo$Zv%HH>r;uB_5JDQx!eiOt7 zTBx+k9PO~Op7L+W$X<%P;NG$Zg2COTb*Cl8M5`xv|~EzA?25eYoz; zGo?>B<6I&XmR7Q%pCge!J#XZCh2LSSzv{3#!!9jsYs$WPNtOY>mu?*;s_he{7`T$VYo&H1IW_Y{g&yQ+Z2Y{sfX8l_)=H%M9e@L2-zbyEyYGIW z2|Kj7+Qv6s=^+<#$&oqS_zyVSC4s8te1+P}X(g{)0z=Ng!b-Ca{d0CPcB*uQwf2m} zNii7~m=a@7$3pwntIT&2;(+W(LO#a5Q(15Roh!KEN7ciF4@neoU+w;GwA0~_D*I8q zT*UW*>@~o{;b05F{x2PzI%(_FQ7K5la3HwvLVtbkxWP>714HNBkeS)&*Go+;PQFST zw>9uL^f*}HF;gkbDqI-L4|G1mC+q8d=s4tfgL*jA*&yXmCJPU^CeSLR8ztj&qec%eq4Zh$e0x&`xCaMCJxck)j=NzGvP9M`)^9=VGfJGzO9d@j+$ojGJyLh zd2LB;{`fTDI|L86D$xvK>qV8_rl5sF3ZfMVX2(r@=V3OCio9PMwNN(V= z8cS)IQakD55-%9t^<*5}U{$uZhQ|cFR*8P0=_9#V=O)gjv%p-_iqVq@SX+zSG{a$@ z8Al9K{^Z}}T9@0_G%u;x-@nTsz1yPXH~b;#7_3_p?u>V{n~wT~3?N)gox5; ze_w$c!defBZ=>w|zr&LP+cfJK1T}@7tP1;+TF1rXeE`6S`FL+sCm9SjbPg*FIf017 zmEdc@ah~HX$rnjj+2^h6GO81j9A61m6-?bd?_t^=pRKYL!P~lOBXHPr=Txk)>>`KQ z_1y)!EuE#X3eS|+A@+tD<^rtoZ8ZR;$t%0Zt0I^RLCNEf$^PmX*z;a-*QIEIT!~}I)R&t<5Tak(}y4hm)5}%^JQMU)I*H_tJw8XASThdot1ZR z4lQVTPnZK}T|7xUDdU6tFj+oos-?!_`=~ydVYh2CZ7Ikvw8$p2d~9;@F2V{TSCF;_ z@q&LX5o&qUg&@qeu4)~DyZ_3$msoRTnc3odNFjH>mDBpTrRlD*2aU23PuZci`?X9g z4F=+YTYECUM=l+iL-PZJ7#69t7)Q?SP^Xj13odA)BTPS)d3%@iB^jE3+yHuD^=d9+ ze>wDy;6)M7ZU^^>aaSEcV;Zk{eagI1OU@gZ>*>_hA{JRMHfF6$3#VkD_B}~ug5pr7 z+$CZ}+UevTdBGV=9gC)ZH$x27Qo~Mx%WIYOZ0z@odYBw{Q^%bzj&fePjRDkcZeIMg z0si|bDevZ4--00lAoh#4rY40rIj237sq5vNwzA;NI>~@WTvdOrv5#&4 zP(IRs9ulKNi~1C(iYg#??T%?ELWom-jCA+(L~e#vx4g)zyF9`mHODL z;@1(lB{{F6j>g}?sua|i@&a$Y5sst={G5j(6Pk;dMK7d=5x-`{36(TIUZ2&mte7t~ z{3=pVr2ZR$Ku9DuoG3ckL!u@V!i-z$#}tZ}8Brb1brW))Iq$`GhIm-Hm$z28#eA=% zHVm(l%=rD(WSs|4=xX==9QM76Oby-;W+ayHr-m6APbh9lFUg&Ljh`9bqU}W>`f6WlDdTXxIKXO~Fb!K3q0DSP1^AE=19khFte#AHPi zHF9VB`@Y$Z3_)a62Y4g|uxk0*z2VrdJY1KgcLw*>p-+C`k%!TjmfgU$=#w&~FWBz~ zXfTRkz^MaYf4icN+#es5P7f2G%DKK3<@8f@);qi8aGH*4a{Y-wK12PSyWortT*gwi zGQ(I-BpM!KY#d&nY%HK-!Kp(RqhsH}8FNExTTe5wcsJi!;9kNbAzYw*lbO28WjImx zluNXPwySCR?(9^U_kbH}9dm#2oX5LhWGK6{*^`U+u&kcRTzavSIM`@D7;5 zH?a%cIt%T_p$D&RCc*OzO)ywD#hV3oC5F)l26qY>m4K^dqs-V?mN{lhm?JUSpWuTE5s5yV93J{Ig3) zB|h(Zkeorq275QlvRklk2)=qvGUo>?ejVZpxm5^j5LmNi;P(#HD3CZMz^#+QQa7>O z@L4rCXYN^_Os--gFZCE6Pz0m>O;VgCjh_+V8P)X4eh5fcxPCHp1=G;)vLl)Jumxjn zeX)O&5_wZRwbjGZxI;_MfJ0>>rQg+Qi11i>@+q_fJfWBsL=9E#1$gxq3t{Z=x`G&lm07zY%W~EN_*uQ zx-l21m*x8oKYT8%EWiq=Y*&0+FfkuenUw+I_HRtV!1{}a;F}Dpl2$mORNzQz~O6UDs0u{`u zHWr)%6>F3E2m}C4qabZ|<&I@DK8ePJ!irbvg`kY!vWGK@$%hmyt$vrr<8>>X^yh+K zJ$c!@D{D!zZFa7g<`y|HcM5*~8N&5&KNv2U+u!GcZL8@Wa)3W?Y_HioM;hq+?Sc*O zbIJYsbGI%I<>;0p8yHuf`@B8q3!&tREgjUBSpX_d>k|bzeswUFT>M2*ZcbZFyfGM= zQ`{yX|;{zGcr z|Dj%<|NjpENJalQDd+$7hB_GAZdV`Ea%86YxE@`I*RlA$@{pzrs`x)ED*qEVb%`zW z0!lE!k{cn1>l3HD4h9=QiNy#+nO7u^tw%Ox5zqbLgf(xTG;;tFuamIs#h4vy1mdq! zqFT{91c|ro1AUMu@q`tL7_ifC z32iTIhB{Q=2MQ9Q>Y9y@otc3`6~J(|Bp73R79O`c)SwBJ$dqDz&9Uu++~ISv-@`kA zU~0#g(?$1)BPs#w@0sV3J@mP0^e>&Re8Q^*6IPgw53}GT?CjS!E1E2Z7216~m?2{p zmY9`9Fj7DmfhD|s04U@VHt1%`?J;~1Ua_q3qD~s+&)?p&LgyO0PzluV-qkii3Gciz z7oNF^c$Z(9vmlj}#kLyKifD>ZA`)N#8BW# z>8X6w?q+_n2GrUbs6_z_o{!mK8MagXbGk8FbfjKf$HFb-^*}0qyS4W6eOT#03XoB? zp}@6bx@0Oe0yeQ?1uOmCKWp6x%-N({ZpvKBSQX%Gs^6N3?mvLQy0)Ov9pHR-!zKTZ zAs_>efoA0tD2^>w*u?VeN7QAYtqR-&M9Z6aO{|grh z#}zuyGG2r4SRWPCCCjx3ub9d2x$2WnbIx!O0f=Tii z9Cg{;4JC^h08MyOg$BtY20t@~mLBRQ@Mf(gy-i)Tjk`aKdDu5$md7)9-qz{!Xw`?^ zL#38NHD4kd#&T|`e*GMuY5eHLfyK6cTB*e1(ZRG!uQJ5qAc|)@4PowfFqQg?^f6XS zTj~K$B^gHnmZe)zEt84OG1m#v6v0$YnZI7yF32q((G`7qMQ}A7HV;p29_Xp j`MiQ#r5}f literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-mainmenu/00004.png b/tests_zemu/snapshots/st-mainmenu/00004.png index e868434aee19b10a19d01b7b7f7ce59e22a4a957..b005528ec6a8b06f94f106cb02c28b4f8dbb1973 100644 GIT binary patch delta 9199 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 literal 11074 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 bc35d1c>V5q?M0wA7G!JVc&_@4*WLdG{LyAq diff --git a/tests_zemu/snapshots/st-swap_with_post_conditions/00000.png b/tests_zemu/snapshots/st-swap_with_post_conditions/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..05089157eab397dd8926e792968e715b6bc15ad0 GIT binary patch literal 8468 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-swap_with_post_conditions/00001.png b/tests_zemu/snapshots/st-swap_with_post_conditions/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba06d1be5288402081939148cbb65bbc8e5cb35 GIT binary patch literal 19099 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 B?h*h1 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-swap_with_post_conditions/00002.png b/tests_zemu/snapshots/st-swap_with_post_conditions/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..53d65650c8d952b524f036879b5782cdcabc4c02 GIT binary patch literal 19918 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 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-swap_with_post_conditions/00005.png b/tests_zemu/snapshots/st-swap_with_post_conditions/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..113de2d3c7c4cee1d540d582865effb1f57e38f8 GIT binary patch literal 24160 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 B2}}S0 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-swap_with_post_conditions/00007.png b/tests_zemu/snapshots/st-swap_with_post_conditions/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..95bac01f4a70fdc2793b7954190f09d3928e418c GIT binary patch literal 8999 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 a4YySt$7dDY4*UUz%}C$uM(s7X`2PZbgtQI- literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/st-swap_with_post_conditions/00008.png b/tests_zemu/snapshots/st-swap_with_post_conditions/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..dfbde52bcca0f7d0b98c71462549ad7a1392b5ca GIT binary patch literal 11174 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 j`MiQ#r5}f literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00000.png b/tests_zemu/snapshots/x-contract_call_long_args/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..e51f0f6faba9b7ea8280d1f1456e52740e7a61c7 GIT binary patch literal 486 zcmV@P)(!N(pGDIk3?eBAI|R zctGfuRmY^=;&gLLE z$plQVchMXuC7=e^sWvtTDw&`ex0zT1swcIh0pMfC;u&ZS=q5Mrv!0=pV&6`<$IvIm zdMf8^FEz1Ngq`}hA!x~4Ke$EBL7hXmJHXM(QCFS1BaQuhcsh0$TZO{i0Y{YU4kQ_Ax`CR)me+*t{Hnd@+X4A2pu##y7Jp zRx@t;eYZvas89`2D^>zJ_b$>Pm-eDSC8#-ypkKcIQ7LMFG-3jhiS?zY%zL8%00000 c004Z2KLb7>Q)!EXga7~l07*qoM6N<$f_u5vy#N3J literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00001.png b/tests_zemu/snapshots/x-contract_call_long_args/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c60d92397c735f9b8caf50b03ced9ce7e71572 GIT binary patch literal 748 zcmVtssF zD5gF26aWG_=XwB0@{|1E?SPk@b4ux+*YyPFgTxEmIajb{@w3~34(!!%cdOXHWegs1 zYmQ@9Kp|!)&T!HSusL+sJ!}OS9M|=QSOZYD$~xBjyEWz>`+ZJ7xqfF4IFxWV;Q^eN zX8-^I1lJxwPIy|(5efsP%V?V4CcR6puVH?058@>F$B9<#W^*6GO25AUd7*!32#8VnC zPabI}MdLK-^q+jfY#O(%*%qu9-EKxD44VOghC*Qoz<4#T<_k z=@(ozYo2_MBzzO%CM>E2r6q5QfUEAtU3OezT)iHNbvs5arz`03%z&Ei><_be)E477 zXRJGnuUg!PCftX5w$0$T;~D@il}zFvo>kLU)VLxnhz)x{gq9mVyu1@kg&>KKU&L0?)b}-+e&bH?_zGD5Ex~5^1W7ibF(Uu~ e00000oWU=^PW%L6L4zUy0000?{cJUiB6K08SxZn3Jvu|zI)Y*AUs%>JAvdJvFb9GMZ z59d^uDP48JCEQi5LDv4kg{(Tx5y@rgnRfA!E*IH)=Go8Kc52)69%TlG59NJRXMX!{ z_~hIZ`(-~BzpXP-n8~JcxgkX=;7p8q*UP?z`_GiE<2PP;dBW2AnawMf)*ITMND)8v i#CDG79-#N2;DZsr;)iyLbyoy4K_Z^6elF{r5}E+0w|go8 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00003.png b/tests_zemu/snapshots/x-contract_call_long_args/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..3007712ee1ac8bbe590808efa3fd36bd796ce187 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2}AYZcrPebCi zH)?nOd)!IoS6QOT;kQ)w$^UyUteKt%1%O%@iuF$)4D$M9bgW|M{C~T%7O35HuCqI4 z@#bft{ON<6W*f_}ZFkvxc}9@d#&!9T&kiUucJZv}ak^XaB`9%L`ez+SE#A4u;(zORmc-mr|2ciZgis_xAd(|#6|he~@E|E^3bn!RfCCa>qeXUuBwv}I=4 z(E4l5p_fPdY&M*pw&9uNv7hd5n$G^4bj|xfnn#1N(1RY9KQlx5gu3ON+2wa0kqIl8 yNLiG>OfYLveveGWBCg6L`EM>2j36%~Kttv}cZFxlk0exbK!TpGelF{r5}E*IPnsqG literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00004.png b/tests_zemu/snapshots/x-contract_call_long_args/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd52883d3c6d9d9e1df1f14c3e41119b38e5829 GIT binary patch literal 539 zcmV+$0_6RPP)`*U+ZZ;~@{cHfjTDNq|LqEmB;zZHqDH@>EU{%yn{waExy*FNBtwvw0!O zoly;XBz}G`X;-kE-XAIbOywA3o~K+PRmp7SwS^H+bIV~Vm;I`K%C3#@n2dP?tiO`q zf|?9Va@7-$nslbfpK3wAWXs-wAr$|($;~Z_H?JP_OMjOzDgp9=2Zo^2l-k^5v!XL< z{0U>1q3R?YvZ+{N7eO(d2ioX)09 zwi7UeO!TLrgqrA2h8(PfQD`O1!z+>DZTu*IslU#1M0M9)Jc(KrKiBRGmx@hgu(z4g zw>L5T9I>;iuI6$34%i7VX5{7EhtP9Sm=9U<&e9#cCINCZwFRhohW>>Sra4gdfE0000000000 d0001V{sH%;kg{D(3aEaktG3V{f)4fL&cpNsb ze%bQRd(m{;lvbT)S*AA6CExud56I_m94VFoYGPox{gd;`)MCB!noAwd7WkfvR7==g zv0&2KmbVSX&%Peg7u1Zkd_HATPI#bowAXGa1z(GYVTY$2J$z&Rv{=gpnMpJ5SBml( zX8YuvN%2Y4-iwO40))T&v1Uw^EO z(qW&&HTAK-%GpgJ>5rd!ab8?p#r|iDPXr&&`-bHrkJ;1;wr{gKyem0Bo=H#JsZQ0s zGg|d`>5*y4+`okkBv&r0`1wA^?Q{7>&K;)n=N%5n`sQA?@7h}DtA#lS{Qu7im|eg! zRVe?!BJ;aXDn(20*s?tR?_O5()MvIyRpr52saIQn{+Hcg^=q;qzt0Wl43y@SKZGJ@+ND>(Ggh=^nI7yA}3YVujUA0*@H>gTe~DWM4f$8Oyx literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00006.png b/tests_zemu/snapshots/x-contract_call_long_args/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..aade4dfd1622600e23f14395022f830b0146c17a GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Fba4!+nDh2#?xbb~o`%G2 zmuFY}S1z3Xub}NDQ)j~A<5#}_+*+D>LExej2T<36lKQyDq@GWY3uWRa1{d6)v0v@j zjNXHG7t6lMiCaxwyXL+`vXziaVEE{J~x}HDY)0&2ZDc+Ifzev*ON`ALw25Vpq?mjdRP_*QHk9-&y!T zWQ*}zv#f`|^&Z%;-n~$2oBB9&y<4-DlpTX^u*<3=UpOYZZ#nj`dx^xy-RFdXuJr%H z{J!aReMjoCrzPhv7TxCG;k(WvExY$t)6$#;x^rUP%=Z1ziAzopr0M5O~mH+?% literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00007.png b/tests_zemu/snapshots/x-contract_call_long_args/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..db320aacd3750402a291aa8cf928c90fcaf3dc25 GIT binary patch literal 323 zcmV-J0lfZ+P)5u=m{`Q0yj2|`MvdG358cYF#r7pnq=|4J(W92Qt9kO527T_k?Uyx*4 zXoK0q$8E1Z3G^hAJc0gWt4Wsq(=4P~_D`k;k#wO*?%_z%3jhEB000000001o`36qk Vwu|6ptx^C0002ovPDHLkV1mltk_i9+ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00008.png b/tests_zemu/snapshots/x-contract_call_long_args/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..1f95cf228589972c4400e9c4f24de22882e527db GIT binary patch literal 822 zcmV-61Ihe}P)Pc=PSVigaiWQBqaa<00000z_a9>bIz-^u=u-L zfr)Hx`kSBC3OLk8ysoPhUe|R$Dj#aZ!ado21zaD}w=+be*B?r)%{gfW5RR~~%hoHP z1eu7fi|}-{9%c6x5a&44-)!xGdoK-cr$y{gPn-(z(EbO1!q$7h|G=Ns3OoRr@(4iy z01(951IWQn47K9nkKBpGe2!RtCwXcC(umOu(Om3Zl;@oqdZy3enCmGH$LQBVJIuM| z#s^Z!n<6Eo1>TOR3_q9}%4@=+@`i3&<6_;KmB-Ndq~MZTT{1UqnuI4|-GqbsJ)49X zxkhOUYjINaYj8NCB=5+*pQ{e2qnND?58uXOj0}v|8ic$^FeHnBC`qg##(ko;J6Oy^V+ z#6ua6?D4mo#)&*hfqF<$(2Z(jSpPKyQ^Wc%10SpeQD`NOk>P`>becDk-pU_%Me&iQ zQ!T9BsExj~Hn~3H(CQMg5i)koELuqqd{o*v-KSznd<@3Z5hWvzH0E4zXd3<5&^&yB z9B;v(T=d)*0DX_SsUYveqhIT3>q-~#{v0N{)F z{vS|p!sOU0mL%mxHa}AuKP58WkMk0)&+o*|k{apB`e`Kb8F^%syujPP4YgA`8coT7 zvpD!aVyzj_;35d-@sA|9>a~bO(pya-sC;!xG_5A_-U{doKF`9tTfW(z6oP)`PVnlF zbKQfWOYMWm?>LQ)#+3mUzi+La2Ydhk0001;f1k*lRlAigcK`qY07*qoM6N<$f*@ms AlK=n! literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00009.png b/tests_zemu/snapshots/x-contract_call_long_args/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..b603f27299361beaff4d344081c05cf14960b645 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QvW?&978JRyuIPrcgTQ;^}@M~ zyh*?1HOptZx{5Hha$UUD_&rSY)uF$hZ#q&L85%DCbrCO^67~95fLG_*CmZj-VB*`j zY`@$6Fs0@DUogqN+?*}F^IDWwrr`Z&(O#bWURSU5ci0)RPW*A+i^GR?mRT}3+d6*l z)mXbneZkT1QP)mJ*H8Y%@@D&1kCWT~Px>Qe_2yBX#24er*K;4b-&=ppisyNxmH*^& zwwlf>x*7a;*&d|MH)byRpKv+WA$;A!gE|cF4Kn}Fy!zH&pz&zU?wgn8(+~9A57uAA zUHQ&)VsOpjH)hV${$;*%(fvC)ve{!-fJ(8&qzXo$w;|wx!T*KaEs}w{^5;PUp00i_ I>zopr0Keyo;Q#;t literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00010.png b/tests_zemu/snapshots/x-contract_call_long_args/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..22822ee2621172d3ba3def746922c173ba60aacf GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Eba4!+nDh2#^twX|0u6~K z>FRIlJ>MKlfHCExaVGG7Mgxl>e937o`RI3 zFW(w2)K#y_?>-i{WEcCF+Z$im?&bU-oby~t?anlRiQmuCm_6IR=vx(6J#TQ%*)Qxj z%Z8bc;fwHW<|?x}haYdfl4lmVcAjdy!nWx>kGQ?&YKLs>jmTKSyjJJF`Oo}E%IAMf z(be2vm~rd>i>S5|gL0%2*Cu~R zX*c@G((*lI26OOF{^xm|K?i44x(ixm$1mK%Zj--rtEE9G;q?y3hw?w99^&Y8xr*nr*rq6OF7$BQPNJQxz9 e4-7$MU~rbbFi4y))Nn^VNZ8ZW&t;ucLK6T6J-z1u literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00011.png b/tests_zemu/snapshots/x-contract_call_long_args/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..0c71d1d93df800f6bc6218460017ff4cf1fc84b1 GIT binary patch literal 921 zcmV;K17`e*P)K@+xzYDMHDucpDp-4Jf!A&1$_X@Zk zq}J3cV?_KUs;y^qX~kiiXvtDet^mT)SxGzu3OBQL1(Xh3`bS&gflR}1j|o8#1j|5sK#9fTA&(T+ky^Y%X<|eh5dg=3aBAcgMFY4nXsFg8+9`Gi zwA;XbrY7a!LsAalnsTCn>(P>KT9!#{Q8Q1gVwbcWYEK?R?URB_f~=ffZI|#OP%6S` z-`or2$W=%)Sc{XQUya=nC3!<)(>1CC_=}6Cq!xB9b`Wiv9v_y3HW3gddD2^q@?D|7 z5rTXzt4yf1QUD8~$M9f(6c7{DP zjbIODJhF?gNO3D*S7YGLH3AOD@y$2$Z}U6Mh$jvospV zuQtuqlh^{XRO#il{-%m=-5iVW!5D!s$Wsga!p}<_j5@$K{crdp=*leBoi7Oqu_P&D zG$pA%Qaug+Jbh&JXMyK6uGp341WHD_eE4sw<3sT7222P+_XqdBL^e0F2Y{4n*DeY| vInUktEVop7Z(jdQ`T2wof*=TjAeh8IGA}8z(ji(e00000NkvXXu0mjfPtmFV literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00012.png b/tests_zemu/snapshots/x-contract_call_long_args/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..d99fa0b21734c5b25386928b1110a512648536a8 GIT binary patch literal 461 zcmV;;0W$uHP)HGY&$VY;RGz0(u003PnrIb?bCsC{{dAwMb zsnxvBk8^t$H3C$|F~+Fga=c!aan8Z7XJg@Wc<;f#FUA;iL~0?ktCd$mI)iINcSr@=EfY@ORlbD$iuz^8fHyf z=js3QY|Kc^!LMEr003}xdLy{Qm+h#vyPzBq@u4I>Yt=I0^JG+xF-KIx7V?Tx(vhP_?Y3|5R)V5-Yo1B2vXDRmcdP`46PybhpYjOhi zSseH2Nt;YS<6oyy;ytFm)@o|=w>+g#-}A;H3@s@`{cp6`y7!6OxW}mmndrMwLQV9Y zk%K$23f-v_WOA?+;ROHy0000000000000000G9a!jVoVnuHG%CpU#%bfl#&pZ5;=Lfs>AECUynhS{x46l#Q zW<2{k?eBzl`=^9G+QHFsJs?@+K*SZMDf?O0EZ*UGf+=V6Uy+Rr)~Wwn{)=<2G~wr6 zEL9?y((zv4?s=8Te^dQ}e7}h=W}EiHY1)j#(>(NnK0yWsXQi*b?0$Y_Pn07_*wfX| JWt~$(6999(hO__x literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00014.png b/tests_zemu/snapshots/x-contract_call_long_args/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..35f106cdc659c2f1b8b19b89972c4ac1bc9c95db GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9eba4!+nDh2#B44utPg~-) zH)?nOd+a@3H^YRb@R7*RU3<^#PnHah)-VVL>B{>)L-v3}+P0V{bDq0>>OXUad%+u1 z>jwW*Jij!|HqZI|X>$COKj#FP?cKOPl`IbpUFEgrz2~i|9LCIAww7O$bS6JLbzT;mCD$9$wAZu!4%?lt_h3iF*6Tf+zUsVO$5`*Qi}fqV zmd7j%rdrtt-X(rbSs!l4kg4{}jcnpTFU&z{>Y5TC5s#&!66< zwJvgbrwD)2;$Y>{glV%G?QD*JWp6$ASR~y+==8;auRJsM#ai!jGMjy}y?si&;rsf_ zbHBVQIc9w1ev+}x#~r_4?)Ol3`n%wFYsGZ=^^H63zjr!SHpz##O=&MM5RkzEgM7A& VyW{PTukZy4d%F6$taD0e0sw1>rJ?`; literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00015.png b/tests_zemu/snapshots/x-contract_call_long_args/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..404a33596b07383dda8943c0ee6b42968b0a51dc GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9gba4!+nDh2#qEM59KwDzg zF3#`vm+mc<_p@f%5!Jc-#_vBFCWbGaT?|!$njVyxzvtpnRC=0q?&fN>|9&p3j&(eH z7|ZBAbMCyON|TD?%w9TWuKWD=9Z;yw^L=k(i(UAy%tdkmH-)!+o22}@WXld)hsV2p zuEj2_K2T@uw!h;x!)b=ypXJ=TrzV%q+L`z)U~9mi+2_LU7(Vd#`LA-uS)ZZiY&}oJ zv$8i#PhZVDbf-t|J#V&RpTgKeCJ!!i$ zKYKg>{CDZ2eN;PNMdzM*S0{M>H<`P_^MA^gM)h@0^UR!<@wO?&0RsUUB+O8^kAM33 Sw(w6*kg%t#pUXO@geCxpX{74_ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00016.png b/tests_zemu/snapshots/x-contract_call_long_args/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4be69934787c368c2b5ed677cc7f5a2470be3b GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hpba4!+nDh2#G+&c}K^PbX0`eJS}y70`%8T>n^%dV>bk>TM}C(cF@9*Jbj^5WTF;gKGIO)y zjlJ*9*PE9W@jdm~5r5wEu#TD8y6+Pnh8_O<-8#^Bx$bnOy3REWn^jXeAFev)TXe-F zTky7j?62N_lL@yzwx7O!=&4O1W7^|)7fcr%%i5*3D%0_G;tl)cpW3Io3*7!cdXW1o sV&B=e%knGs=l(tai5cc!1_ryAe9w9}zGZ%X&;TUp>FVdQ&MBb@086r+N&o-= literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-contract_call_long_args/00017.png b/tests_zemu/snapshots/x-contract_call_long_args/00017.png new file mode 100644 index 0000000000000000000000000000000000000000..0425466580963a2bef09ca2320cb40d8843caf4e GIT binary patch literal 511 zcmVxy1gt*>D?pb7$J^uQ z6u**uQJ}E>hp-u-86aK-Z1@Wygb+dqA%qYg$1gOyHfEUU(MbRR002ovPDHLkV1hoO B;)(zO literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-mainmenu/00004.png b/tests_zemu/snapshots/x-mainmenu/00004.png index d8ed08de1a07e8baf8ebcf8b80a7659fbeacb3d0..66e6ea9b2f48d3740547646f827ed287ff294b26 100644 GIT binary patch delta 362 zcmeyv)XF?TrQXNW#WAE}&fA;Oe9a01t%^Q z3A>qOmWnL4`dU4^>659#v5Xr>Us=u67+n+y3{W7?jHmA<-R*>!e=MTPpQk}EZ zSZ3PW_9qPbtjQkxL)x9+#6`S&I2nPtP#8YQ?^C<^`Iw66eRhzjr>mdKI;Vst E08mM*CjbBd delta 353 zcmZo={=+murQX@o#WAE}&f6P-e9a01u7S5o)Zf*6zF8{2jD=l7M6m7Iy!FRcsphw6 zTCp=AfZWGfwhSk$^Q z3A>qOmWnL4`dU4^>659#v5Xr>Us=u67+n+y3{W7?jHmA<-R*>!e=MTPpQk}EZ zSZ3PW_9qPbtjQkxL)x9+#6`S&I2nPtP#8YQ?^C<^`Iw66eRhzjr>mdKI;Vst E08mM*CjbBd delta 353 zcmZo={=+murQX@o#WAE}&f6P-e9a01u7S5o)Zf*6zF8{2jD=l7M6m7Iy!FRcsphw6 zTCp=AfZWGfwhSk$@P)(!N(pGDIk3?eBAI|R zctGfuRmY^=;&gLLE z$plQVchMXuC7=e^sWvtTDw&`ex0zT1swcIh0pMfC;u&ZS=q5Mrv!0=pV&6`<$IvIm zdMf8^FEz1Ngq`}hA!x~4Ke$EBL7hXmJHXM(QCFS1BaQuhcsh0$TZO{i0Y{YU4kQ_Ax`CR)me+*t{Hnd@+X4A2pu##y7Jp zRx@t;eYZvas89`2D^>zJ_b$>Pm-eDSC8#-ypkKcIQ7LMFG-3jhiS?zY%zL8%00000 c004Z2KLb7>Q)!EXga7~l07*qoM6N<$f_u5vy#N3J literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00001.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..f8c60d92397c735f9b8caf50b03ced9ce7e71572 GIT binary patch literal 748 zcmVtssF zD5gF26aWG_=XwB0@{|1E?SPk@b4ux+*YyPFgTxEmIajb{@w3~34(!!%cdOXHWegs1 zYmQ@9Kp|!)&T!HSusL+sJ!}OS9M|=QSOZYD$~xBjyEWz>`+ZJ7xqfF4IFxWV;Q^eN zX8-^I1lJxwPIy|(5efsP%V?V4CcR6puVH?058@>F$B9<#W^*6GO25AUd7*!32#8VnC zPabI}MdLK-^q+jfY#O(%*%qu9-EKxD44VOghC*Qoz<4#T<_k z=@(ozYo2_MBzzO%CM>E2r6q5QfUEAtU3OezT)iHNbvs5arz`03%z&Ei><_be)E477 zXRJGnuUg!PCftX5w$0$T;~D@il}zFvo>kLU)VLxnhz)x{gq9mVyu1@kg&>KKU&L0?)b}-+e&bH?_zGD5Ex~5^1W7ibF(Uu~ e00000oWU=^PW%L6L4zUy0000?{cJUiB6K08SxZn3Jvu|zI)Y*AUs%>JAvdJvFb9GMZ z59d^uDP48JCEQi5LDv4kg{(Tx5y@rgnRfA!E*IH)=Go8Kc52)69%TlG59NJRXMX!{ z_~hIZ`(-~BzpXP-n8~JcxgkX=;7p8q*UP?z`_GiE<2PP;dBW2AnawMf)*ITMND)8v i#CDG79-#N2;DZsr;)iyLbyoy4K_Z^6elF{r5}E+0w|go8 literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00003.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..3007712ee1ac8bbe590808efa3fd36bd796ce187 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hoba4!+nDh2}AYZcrPebCi zH)?nOd)!IoS6QOT;kQ)w$^UyUteKt%1%O%@iuF$)4D$M9bgW|M{C~T%7O35HuCqI4 z@#bft{ON<6W*f_}ZFkvxc}9@d#&!9T&kiUucJZv}ak^XaB`9%L`ez+SE#A4u;(zORmc-mr|2ciZgis_xAd(|#6|he~@E|E^3bn!RfCCa>qeXUuBwv}I=4 z(E4l5p_fPdY&M*pw&9uNv7hd5n$G^4bj|xfnn#1N(1RY9KQlx5gu3ON+2wa0kqIl8 yNLiG>OfYLveveGWBCg6L`EM>2j36%~Kttv}cZFxlk0exbK!TpGelF{r5}E*IPnsqG literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00004.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd52883d3c6d9d9e1df1f14c3e41119b38e5829 GIT binary patch literal 539 zcmV+$0_6RPP)`*U+ZZ;~@{cHfjTDNq|LqEmB;zZHqDH@>EU{%yn{waExy*FNBtwvw0!O zoly;XBz}G`X;-kE-XAIbOywA3o~K+PRmp7SwS^H+bIV~Vm;I`K%C3#@n2dP?tiO`q zf|?9Va@7-$nslbfpK3wAWXs-wAr$|($;~Z_H?JP_OMjOzDgp9=2Zo^2l-k^5v!XL< z{0U>1q3R?YvZ+{N7eO(d2ioX)09 zwi7UeO!TLrgqrA2h8(PfQD`O1!z+>DZTu*IslU#1M0M9)Jc(KrKiBRGmx@hgu(z4g zw>L5T9I>;iuI6$34%i7VX5{7EhtP9Sm=9U<&e9#cCINCZwFRhohW>>Sra4gdfE0000000000 d0001V{sH%;kg{D(3aEaktG3V{f)4fL&cpNsb ze%bQRd(m{;lvbT)S*AA6CExud56I_m94VFoYGPox{gd;`)MCB!noAwd7WkfvR7==g zv0&2KmbVSX&%Peg7u1Zkd_HATPI#bowAXGa1z(GYVTY$2J$z&Rv{=gpnMpJ5SBml( zX8YuvN%2Y4-iwO40))T&v1Uw^EO z(qW&&HTAK-%GpgJ>5rd!ab8?p#r|iDPXr&&`-bHrkJ;1;wr{gKyem0Bo=H#JsZQ0s zGg|d`>5*y4+`okkBv&r0`1wA^?Q{7>&K;)n=N%5n`sQA?@7h}DtA#lS{Qu7im|eg! zRVe?!BJ;aXDn(20*s?tR?_O5()MvIyRpr52saIQn{+Hcg^=q;qzt0Wl43y@SKZGJ@+ND>(Ggh=^nI7yA}3YVujUA0*@H>gTe~DWM4f$8Oyx literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00006.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00006.png new file mode 100644 index 0000000000000000000000000000000000000000..aade4dfd1622600e23f14395022f830b0146c17a GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Fba4!+nDh2#?xbb~o`%G2 zmuFY}S1z3Xub}NDQ)j~A<5#}_+*+D>LExej2T<36lKQyDq@GWY3uWRa1{d6)v0v@j zjNXHG7t6lMiCaxwyXL+`vXziaVEE{J~x}HDY)0&2ZDc+Ifzev*ON`ALw25Vpq?mjdRP_*QHk9-&y!T zWQ*}zv#f`|^&Z%;-n~$2oBB9&y<4-DlpTX^u*<3=UpOYZZ#nj`dx^xy-RFdXuJr%H z{J!aReMjoCrzPhv7TxCG;k(WvExY$t)6$#;x^rUP%=Z1ziAzopr0M5O~mH+?% literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00007.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00007.png new file mode 100644 index 0000000000000000000000000000000000000000..db320aacd3750402a291aa8cf928c90fcaf3dc25 GIT binary patch literal 323 zcmV-J0lfZ+P)5u=m{`Q0yj2|`MvdG358cYF#r7pnq=|4J(W92Qt9kO527T_k?Uyx*4 zXoK0q$8E1Z3G^hAJc0gWt4Wsq(=4P~_D`k;k#wO*?%_z%3jhEB000000001o`36qk Vwu|6ptx^C0002ovPDHLkV1mltk_i9+ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00008.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00008.png new file mode 100644 index 0000000000000000000000000000000000000000..1f95cf228589972c4400e9c4f24de22882e527db GIT binary patch literal 822 zcmV-61Ihe}P)Pc=PSVigaiWQBqaa<00000z_a9>bIz-^u=u-L zfr)Hx`kSBC3OLk8ysoPhUe|R$Dj#aZ!ado21zaD}w=+be*B?r)%{gfW5RR~~%hoHP z1eu7fi|}-{9%c6x5a&44-)!xGdoK-cr$y{gPn-(z(EbO1!q$7h|G=Ns3OoRr@(4iy z01(951IWQn47K9nkKBpGe2!RtCwXcC(umOu(Om3Zl;@oqdZy3enCmGH$LQBVJIuM| z#s^Z!n<6Eo1>TOR3_q9}%4@=+@`i3&<6_;KmB-Ndq~MZTT{1UqnuI4|-GqbsJ)49X zxkhOUYjINaYj8NCB=5+*pQ{e2qnND?58uXOj0}v|8ic$^FeHnBC`qg##(ko;J6Oy^V+ z#6ua6?D4mo#)&*hfqF<$(2Z(jSpPKyQ^Wc%10SpeQD`NOk>P`>becDk-pU_%Me&iQ zQ!T9BsExj~Hn~3H(CQMg5i)koELuqqd{o*v-KSznd<@3Z5hWvzH0E4zXd3<5&^&yB z9B;v(T=d)*0DX_SsUYveqhIT3>q-~#{v0N{)F z{vS|p!sOU0mL%mxHa}AuKP58WkMk0)&+o*|k{apB`e`Kb8F^%syujPP4YgA`8coT7 zvpD!aVyzj_;35d-@sA|9>a~bO(pya-sC;!xG_5A_-U{doKF`9tTfW(z6oP)`PVnlF zbKQfWOYMWm?>LQ)#+3mUzi+La2Ydhk0001;f1k*lRlAigcK`qY07*qoM6N<$f*@ms AlK=n! literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00009.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00009.png new file mode 100644 index 0000000000000000000000000000000000000000..b603f27299361beaff4d344081c05cf14960b645 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*QvW?&978JRyuIPrcgTQ;^}@M~ zyh*?1HOptZx{5Hha$UUD_&rSY)uF$hZ#q&L85%DCbrCO^67~95fLG_*CmZj-VB*`j zY`@$6Fs0@DUogqN+?*}F^IDWwrr`Z&(O#bWURSU5ci0)RPW*A+i^GR?mRT}3+d6*l z)mXbneZkT1QP)mJ*H8Y%@@D&1kCWT~Px>Qe_2yBX#24er*K;4b-&=ppisyNxmH*^& zwwlf>x*7a;*&d|MH)byRpKv+WA$;A!gE|cF4Kn}Fy!zH&pz&zU?wgn8(+~9A57uAA zUHQ&)VsOpjH)hV${$;*%(fvC)ve{!-fJ(8&qzXo$w;|wx!T*KaEs}w{^5;PUp00i_ I>zopr0Keyo;Q#;t literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00010.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00010.png new file mode 100644 index 0000000000000000000000000000000000000000..22822ee2621172d3ba3def746922c173ba60aacf GIT binary patch literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Eba4!+nDh2#^twX|0u6~K z>FRIlJ>MKlfHCExaVGG7Mgxl>e937o`RI3 zFW(w2)K#y_?>-i{WEcCF+Z$im?&bU-oby~t?anlRiQmuCm_6IR=vx(6J#TQ%*)Qxj z%Z8bc;fwHW<|?x}haYdfl4lmVcAjdy!nWx>kGQ?&YKLs>jmTKSyjJJF`Oo}E%IAMf z(be2vm~rd>i>S5|gL0%2*Cu~R zX*c@G((*lI26OOF{^xm|K?i44x(ixm$1mK%Zj--rtEE9G;q?y3hw?w99^&Y8xr*nr*rq6OF7$BQPNJQxz9 e4-7$MU~rbbFi4y))Nn^VNZ8ZW&t;ucLK6T6J-z1u literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00011.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00011.png new file mode 100644 index 0000000000000000000000000000000000000000..0c71d1d93df800f6bc6218460017ff4cf1fc84b1 GIT binary patch literal 921 zcmV;K17`e*P)K@+xzYDMHDucpDp-4Jf!A&1$_X@Zk zq}J3cV?_KUs;y^qX~kiiXvtDet^mT)SxGzu3OBQL1(Xh3`bS&gflR}1j|o8#1j|5sK#9fTA&(T+ky^Y%X<|eh5dg=3aBAcgMFY4nXsFg8+9`Gi zwA;XbrY7a!LsAalnsTCn>(P>KT9!#{Q8Q1gVwbcWYEK?R?URB_f~=ffZI|#OP%6S` z-`or2$W=%)Sc{XQUya=nC3!<)(>1CC_=}6Cq!xB9b`Wiv9v_y3HW3gddD2^q@?D|7 z5rTXzt4yf1QUD8~$M9f(6c7{DP zjbIODJhF?gNO3D*S7YGLH3AOD@y$2$Z}U6Mh$jvospV zuQtuqlh^{XRO#il{-%m=-5iVW!5D!s$Wsga!p}<_j5@$K{crdp=*leBoi7Oqu_P&D zG$pA%Qaug+Jbh&JXMyK6uGp341WHD_eE4sw<3sT7222P+_XqdBL^e0F2Y{4n*DeY| vInUktEVop7Z(jdQ`T2wof*=TjAeh8IGA}8z(ji(e00000NkvXXu0mjfPtmFV literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00012.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00012.png new file mode 100644 index 0000000000000000000000000000000000000000..d99fa0b21734c5b25386928b1110a512648536a8 GIT binary patch literal 461 zcmV;;0W$uHP)HGY&$VY;RGz0(u003PnrIb?bCsC{{dAwMb zsnxvBk8^t$H3C$|F~+Fga=c!aan8Z7XJg@Wc<;f#FUA;iL~0?ktCd$mI)iINcSr@=EfY@ORlbD$iuz^8fHyf z=js3QY|Kc^!LMEr003}xdLy{Qm+h#vyPzBq@u4I>Yt=I0^JG+xF-KIx7V?Tx(vhP_?Y3|5R)V5-Yo1B2vXDRmcdP`46PybhpYjOhi zSseH2Nt;YS<6oyy;ytFm)@o|=w>+g#-}A;H3@s@`{cp6`y7!6OxW}mmndrMwLQV9Y zk%K$23f-v_WOA?+;ROHy0000000000000000G9a!jVoVnuHG%CpU#%bfl#&pZ5;=Lfs>AECUynhS{x46l#Q zW<2{k?eBzl`=^9G+QHFsJs?@+K*SZMDf?O0EZ*UGf+=V6Uy+Rr)~Wwn{)=<2G~wr6 zEL9?y((zv4?s=8Te^dQ}e7}h=W}EiHY1)j#(>(NnK0yWsXQi*b?0$Y_Pn07_*wfX| JWt~$(6999(hO__x literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00014.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00014.png new file mode 100644 index 0000000000000000000000000000000000000000..35f106cdc659c2f1b8b19b89972c4ac1bc9c95db GIT binary patch literal 379 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9eba4!+nDh2#B44utPg~-) zH)?nOd+a@3H^YRb@R7*RU3<^#PnHah)-VVL>B{>)L-v3}+P0V{bDq0>>OXUad%+u1 z>jwW*Jij!|HqZI|X>$COKj#FP?cKOPl`IbpUFEgrz2~i|9LCIAww7O$bS6JLbzT;mCD$9$wAZu!4%?lt_h3iF*6Tf+zUsVO$5`*Qi}fqV zmd7j%rdrtt-X(rbSs!l4kg4{}jcnpTFU&z{>Y5TC5s#&!66< zwJvgbrwD)2;$Y>{glV%G?QD*JWp6$ASR~y+==8;auRJsM#ai!jGMjy}y?si&;rsf_ zbHBVQIc9w1ev+}x#~r_4?)Ol3`n%wFYsGZ=^^H63zjr!SHpz##O=&MM5RkzEgM7A& VyW{PTukZy4d%F6$taD0e0sw1>rJ?`; literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00015.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00015.png new file mode 100644 index 0000000000000000000000000000000000000000..404a33596b07383dda8943c0ee6b42968b0a51dc GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@9gba4!+nDh2#qEM59KwDzg zF3#`vm+mc<_p@f%5!Jc-#_vBFCWbGaT?|!$njVyxzvtpnRC=0q?&fN>|9&p3j&(eH z7|ZBAbMCyON|TD?%w9TWuKWD=9Z;yw^L=k(i(UAy%tdkmH-)!+o22}@WXld)hsV2p zuEj2_K2T@uw!h;x!)b=ypXJ=TrzV%q+L`z)U~9mi+2_LU7(Vd#`LA-uS)ZZiY&}oJ zv$8i#PhZVDbf-t|J#V&RpTgKeCJ!!i$ zKYKg>{CDZ2eN;PNMdzM*S0{M>H<`P_^MA^gM)h@0^UR!<@wO?&0RsUUB+O8^kAM33 Sw(w6*kg%t#pUXO@geCxpX{74_ literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00016.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00016.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9e41f4941961115bc8f216bf56a900c37db496 GIT binary patch literal 846 zcmV-U1F`&xP)Z&sPFM2xJ5nNlE|!00000Oy_G=$2n*E^*9bo zMy>MIHZ|#PbqPQ7yQCb)!92lgI~0ytG@Hc^VC0;OOXvqymB>U>|H&p)xh#Bwx4u^! zz;PDD=>sWzd{A4law_cfHI2n9K%Ii%gV{QLYz;kx^?Sg~?wkO%ipPbZIIYfmLd2JB z?0`g`3^jjfvtX9jN53EqCVkJz2)T0{1G+Up2VbyrYHcPqMma_5` z6n`kBq}5g?>>QeeZ^Fw31?{``He=+~$uiiAld4~X!%-!jY`LY-bO4QFzBMv@JBu+g zFxhGlYM5_85l|)BY^ZUcnOz-kB?R@|Ny+TIldr#uvMV^-L!WTrjv-7&9;pvQcXc{3N%4B4Z-{CkX@}vdoAwxko<|JeGr=d(WW`8p9 z!AcN?R#KT{_~2GLr#F(`${%DywaT)I3R`c~PG6QzX^%QITB0gpW4EToD(OLv${J_2 zRxOE-!KocFGU7<*nF|ihqCXp&hhHGaH8_+Pz3K%(pAw&VlTHWRH~W3dwtJ@1-*?@( zhEq~~Pi``!(*f2C`k-UVkc#rsk<^?;S}Bq?xOLfe&>w>2Xqz6NWN&xDONdBfnHg!d zvKCO>ue3>O$+He+Luq!i>B$;QMy`E|Sx#4eEs_yC>kjZQiI@+l5%R&QTEjHRE-cAI z{58XxAhiq27)!~1Tyr7@Bftj$006)r=KWKiZo=%?s+J_aB>x(pya-sC=!K zSXSM{ycN(Fe6B@yw|ukRDFnT8Cz$%<-0DHF3iUzccbrZ~TE*R~T+w-R&%u1gB{P&~t`TsuQQ}{*CN5UY1y?5)`H=>FgI&TM)-XOP5EBWf;xlc9x><*o&O{&J9`h>O^^y@zqySsl8Bg4hV z^B7O|oqenDc46J=x7&TbZoBpJ{>KkZVMjdcL*z6w!%J?)X>Xn%wat3ko}1of4fTuH z9@$*xuqpAvr1gCZ*($Fw$vio46dk?ug+!J>l;Gr-vH|xN${e&)dD}nbd2+v9@un+N z+NGW=?d8{*`1+*U%s0C|m&|%&oy?oIi0f?0#FT3Z8ke|1;e`ZvKJ%}%V0`azXO1{X N)YH|^Wt~$(697H(w^jfE literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00018.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00018.png new file mode 100644 index 0000000000000000000000000000000000000000..fecc41ede4831c9c119eb9b75aea4caf0e7b72ab GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hrba4!+nDh2#w9p|19*2vs z!fyPZv`O54!%Uw3CcoJW_CD`+)G!hBD!mQV!%)sYKheeIw5IBO$B$}CW{hWNEv@i7 zpUnDX_C@`=_xFOleoc&3J$qGI>DIoR8^e>UMXzh>g`R)Hb>4e@-c>=*-HTEKlV{(2 z@#Mx$C&RG2OU(^$@11e)$=%ws%8bVM|E`VF@G6^p_^NLBy?1lM4j8c8&YD_ZTk<>C zk=^c=VOv}Etsonr1oH_p+`V55@;B-}celB5`4#)I$Y!929vqjE`H@z4!g}?yWkn*h zHeT>*cbf9U{NdF2VA&(;51x5A7zhdUu;{403JLggHTCrW5+2zei8{62&3O|#_sw=& s(YepKNT4%TL+JcNj}~!|Z;`-`Gu*uzopr0Bi1%=>Px# literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00019.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00019.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9e41f4941961115bc8f216bf56a900c37db496 GIT binary patch literal 846 zcmV-U1F`&xP)Z&sPFM2xJ5nNlE|!00000Oy_G=$2n*E^*9bo zMy>MIHZ|#PbqPQ7yQCb)!92lgI~0ytG@Hc^VC0;OOXvqymB>U>|H&p)xh#Bwx4u^! zz;PDD=>sWzd{A4law_cfHI2n9K%Ii%gV{QLYz;kx^?Sg~?wkO%ipPbZIIYfmLd2JB z?0`g`3^jjfvtX9jN53EqCVkJz2)T0{1G+Up2VbyrYHcPqMma_5` z6n`kBq}5g?>>QeeZ^Fw31?{``He=+~$uiiAld4~X!%-!jY`LY-bO4QFzBMv@JBu+g zFxhGlYM5_85l|)BY^ZUcnOz-kB?R@|Ny+TIldr#uvMV^-L!WTrjv-7&9;pvQcXc{3N%4B4Z-{CkX@}vdoAwxko<|JeGr=d(WW`8p9 z!AcN?R#KT{_~2GLr#F(`${%DywaT)I3R`c~PG6QzX^%QITB0gpW4EToD(OLv${J_2 zRxOE-!KocFGU7<*nF|ihqCXp&hhHGaH8_+Pz3K%(pAw&VlTHWRH~W3dwtJ@1-*?@( zhEq~~Pi``!(*f2C`k-UVkc#rsk<^?;S}Bq?xOLfe&>w>2Xqz6NWN&xDONdBfnHg!d zvKCO>ue3>O$+He+Luq!i>B$;QMy`E|Sx#4eEs_yC>kjZQiI@+l5%R&QTEjHRE-cAI z{58XxAhiq27)!~1Tyr7@Bftj$006)r=KWKiZo=%?s+J_aB>x(pya-sC=!K zSXSM{ycN(Fe6B@yw|ukRDFnT8Cz$%<-0DHF3iUzccbrZ~TE*R~T+w-R&%u1gB{P&~t`TsuQQ}{*CN5UY1y?5)`H=>FgI&TM)-XOP5EBWf;xlc9x><*o&O{&J9`h>O^^y@zqySsl8Bg4hV z^B7O|oqenDc46J=x7&TbZoBpJ{>KkZVMjdcL*z6w!%J?)X>Xn%wat3ko}1of4fTuH z9@$*xuqpAvr1gCZ*($Fw$vio46dk?ug+!J>l;Gr-vH|xN${e&)dD}nbd2+v9@un+N z+NGW=?d8{*`1+*U%s0C|m&|%&oy?oIi0f?0#FT3Z8ke|1;e`ZvKJ%}%V0`azXO1{X N)YH|^Wt~$(697H(w^jfE literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00021.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00021.png new file mode 100644 index 0000000000000000000000000000000000000000..fecc41ede4831c9c119eb9b75aea4caf0e7b72ab GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hrba4!+nDh2#w9p|19*2vs z!fyPZv`O54!%Uw3CcoJW_CD`+)G!hBD!mQV!%)sYKheeIw5IBO$B$}CW{hWNEv@i7 zpUnDX_C@`=_xFOleoc&3J$qGI>DIoR8^e>UMXzh>g`R)Hb>4e@-c>=*-HTEKlV{(2 z@#Mx$C&RG2OU(^$@11e)$=%ws%8bVM|E`VF@G6^p_^NLBy?1lM4j8c8&YD_ZTk<>C zk=^c=VOv}Etsonr1oH_p+`V55@;B-}celB5`4#)I$Y!929vqjE`H@z4!g}?yWkn*h zHeT>*cbf9U{NdF2VA&(;51x5A7zhdUu;{403JLggHTCrW5+2zei8{62&3O|#_sw=& s(YepKNT4%TL+JcNj}~!|Z;`-`Gu*uzopr0Bi1%=>Px# literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00022.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00022.png new file mode 100644 index 0000000000000000000000000000000000000000..6d9e41f4941961115bc8f216bf56a900c37db496 GIT binary patch literal 846 zcmV-U1F`&xP)Z&sPFM2xJ5nNlE|!00000Oy_G=$2n*E^*9bo zMy>MIHZ|#PbqPQ7yQCb)!92lgI~0ytG@Hc^VC0;OOXvqymB>U>|H&p)xh#Bwx4u^! zz;PDD=>sWzd{A4law_cfHI2n9K%Ii%gV{QLYz;kx^?Sg~?wkO%ipPbZIIYfmLd2JB z?0`g`3^jjfvtX9jN53EqCVkJz2)T0{1G+Up2VbyrYHcPqMma_5` z6n`kBq}5g?>>QeeZ^Fw31?{``He=+~$uiiAld4~X!%-!jY`LY-bO4QFzBMv@JBu+g zFxhGlYM5_85l|)BY^ZUcnOz-kB?R@|Ny+TIldr#uvMV^-L!WTrjv-7&9;pvQcXc{3N%4B4Z-{CkX@}vdoAwxko<|JeGr=d(WW`8p9 z!AcN?R#KT{_~2GLr#F(`${%DywaT)I3R`c~PG6QzX^%QITB0gpW4EToD(OLv${J_2 zRxOE-!KocFGU7<*nF|ihqCXp&hhHGaH8_+Pz3K%(pAw&VlTHWRH~W3dwtJ@1-*?@( zhEq~~Pi``!(*f2C`k-UVkc#rsk<^?;S}Bq?xOLfe&>w>2Xqz6NWN&xDONdBfnHg!d zvKCO>ue3>O$+He+Luq!i>B$;QMy`E|Sx#4eEs_yC>kjZQiI@+l5%R&QTEjHRE-cAI z{58XxAhiq27)!~1Tyr7@Bftj$006)r=KWKiZo=%?s+J_aB>x(pya-sC=!K zSXSM{ycN(Fe6B@yw|ukRDFnT8Cz$%<-0DHF3iUzccbrZ~TE*R~T+w-R&%u1gB{P&~t`TsuQQ}{*CN5UY1y?5)`H=>FgI&TM)-XOP5EBWf;xlc9x><*o&O{&J9`h>O^^y@zqySsl8Bg4hV z^B7O|oqenDc46J=x7&TbZoBpJ{>KkZVMjdcL*z6w!%J?)X>Xn%wat3ko}1of4fTuH z9@$*xuqpAvr1gCZ*($Fw$vio46dk?ug+!J>l;Gr-vH|xN${e&)dD}nbd2+v9@un+N z+NGW=?d8{*`1+*U%s0C|m&|%&oy?oIi0f?0#FT3Z8ke|1;e`ZvKJ%}%V0`azXO1{X N)YH|^Wt~$(697H(w^jfE literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00024.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00024.png new file mode 100644 index 0000000000000000000000000000000000000000..fa031397692662561fd5332adc1546163d7269ea GIT binary patch literal 398 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|8K2Eu z>%ym>#5zYjIRDSZty6c{?+Yhg{>6T5w-qbUbMY7QUfg*hedAB& zrp;IKf19MLy}ff?lH+sl?s;Eie6lK~&P@8RTJyR3gL*YXenQ#||BoMqAKZWTImhY9 zX@5t``cwI=`o literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00025.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00025.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4be69934787c368c2b5ed677cc7f5a2470be3b GIT binary patch literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hpba4!+nDh2#G+&c}K^PbX0`eJS}y70`%8T>n^%dV>bk>TM}C(cF@9*Jbj^5WTF;gKGIO)y zjlJ*9*PE9W@jdm~5r5wEu#TD8y6+Pnh8_O<-8#^Bx$bnOy3REWn^jXeAFev)TXe-F zTky7j?62N_lL@yzwx7O!=&4O1W7^|)7fcr%%i5*3D%0_G;tl)cpW3Io3*7!cdXW1o sV&B=e%knGs=l(tai5cc!1_ryAe9w9}zGZ%X&;TUp>FVdQ&MBb@086r+N&o-= literal 0 HcmV?d00001 diff --git a/tests_zemu/snapshots/x-swap_with_post_conditions/00026.png b/tests_zemu/snapshots/x-swap_with_post_conditions/00026.png new file mode 100644 index 0000000000000000000000000000000000000000..0425466580963a2bef09ca2320cb40d8843caf4e GIT binary patch literal 511 zcmVxy1gt*>D?pb7$J^uQ z6u**uQJ}E>hp-u-86aK-Z1@Wygb+dqA%qYg$1gOyHfEUU(MbRR002ovPDHLkV1hoO B;)(zO literal 0 HcmV?d00001 diff --git a/tests_zemu/tests/standard.test.ts b/tests_zemu/tests/standard.test.ts index 55ed80cd..614a5a32 100644 --- a/tests_zemu/tests/standard.test.ts +++ b/tests_zemu/tests/standard.test.ts @@ -39,6 +39,18 @@ import { uintCV, stringAsciiCV, stringUtf8CV, + tupleCV, + intCV, + bufferCV, + listCV, + responseOkCV, + responseErrorCV, + someCV, + noneCV, + trueCV, + falseCV, + FungibleConditionCode, + makeStandardSTXPostCondition, } from '@stacks/transactions' import { StacksTestnet } from '@stacks/network' import { AnchorMode } from '@stacks/transactions/src/constants' @@ -57,6 +69,28 @@ const defaultOptions = { jest.setTimeout(180000) +const BIG_TUPLE = tupleCV({ + hello: uintCV(234), + a: intCV(-1), + b: bufferCV(Buffer.from('abcdefgh', 'ascii')), + m: listCV([intCV(-1), intCV(-1), intCV(-1), intCV(-1)]), + result_call: responseOkCV(stringAsciiCV('done')), + error_msg: responseErrorCV(stringUtf8CV('unknown URI')), + nested: someCV(listCV([noneCV(), someCV(intCV(-100))])), + principal: standardPrincipalCV('SP2JXKMSH007NPYAQHKJPQMAQYAD90NQGTVJVQ02B'), + l: tupleCV({ + a: trueCV(), + b: falseCV(), + }), + contractPrincipal: contractPrincipalCV('SP2JXKMSH007NPYAQHKJPQMAQYAD90NQGTVJVQ02B', 'test'), + xxxx: tupleCV({ + yyyy: intCV(123), + ddd: tupleCV({ + ggg: uintCV(123), + }), + }), +}) + describe('Standard', function () { test.concurrent.each(models)('can start and stop container', async function (m) { const sim = new Zemu(m.path) @@ -128,7 +162,6 @@ describe('Standard', function () { const response = await app.getAddressAndPubKey("m/5757'/0'/5'/0/0", AddressVersion.MainnetSingleSig) console.log(response) expect(response.returnCode).toEqual(0x9000) - } finally { await sim.close() } @@ -324,7 +357,7 @@ describe('Standard', function () { console.log(pkResponse) expect(pkResponse.returnCode).toEqual(0x9000) expect(pkResponse.errorMessage).toEqual('No errors') - const devicePublicKey = publicKeyFromBuffer(pkResponse.publicKey); + const devicePublicKey = publicKeyFromBuffer(pkResponse.publicKey) const devicePublicKeyString = pkResponse.publicKey.toString('hex') const recipient = standardPrincipalCV('ST2XADQKC3EPZ62QTG5Q2RSPV64JG6KXCND0PHT7F') @@ -389,7 +422,7 @@ describe('Standard', function () { // Add Ledger signature to transaction tx.auth.spendingCondition.fields[1] = createTransactionAuthField(PubKeyEncoding.Compressed, { data: signature.signatureVRS.toString('hex'), - type: StacksMessageType.MessageSignature + type: StacksMessageType.MessageSignature, }) // For full tx validation, use `stacks-inspect decode-tx ` @@ -443,7 +476,7 @@ describe('Standard', function () { console.log(pkResponse) expect(pkResponse.returnCode).toEqual(0x9000) expect(pkResponse.errorMessage).toEqual('No errors') - const devicePublicKey = publicKeyFromBuffer(pkResponse.publicKey); + const devicePublicKey = publicKeyFromBuffer(pkResponse.publicKey) const devicePublicKeyString = pkResponse.publicKey.toString('hex') const recipient = standardPrincipalCV('ST2XADQKC3EPZ62QTG5Q2RSPV64JG6KXCND0PHT7F') @@ -471,7 +504,7 @@ describe('Standard', function () { // @ts-ignore // Use order-independent multisig P2SH // TODO: Replace with constant once support is added in Stacks.js - tx.auth.spendingCondition.hashMode = 5; + tx.auth.spendingCondition.hashMode = 5 const sigHashPreSign = makeSigHashPreSign( tx.signBegin(), @@ -627,6 +660,99 @@ describe('Standard', function () { } }) + test.concurrent.each(models)(`sign_contract_call_long_args`, async function (m) { + const sim = new Zemu(m.path) + const network = new StacksTestnet() + const senderKey = '2cefd4375fcb0b3c0935fcbc53a8cb7c7b9e0af0225581bbee006cf7b1aa0216' + const my_key = '2e64805a5808a8a72df89b4b18d2451f8d5ab5224b4d8c7c36033aee4add3f27f' + const path = "m/44'/5757'/0'/0/0" + try { + await sim.start({ ...defaultOptions, model: m.name }) + const app = new StacksApp(sim.getTransport()) + // Get pubkey and check + const pkResponse = await app.getAddressAndPubKey(path, AddressVersion.TestnetSingleSig) + console.log(pkResponse) + expect(pkResponse.returnCode).toEqual(0x9000) + expect(pkResponse.errorMessage).toEqual('No errors') + const devicePublicKey = pkResponse.publicKey.toString('hex') + + const recipient = standardPrincipalCV('ST39RCH114B48GY5E0K2Q4SV28XZMXW4ZZTN8QSS5') + const contract_principal = contractPrincipalCV('ST39RCH114B48GY5E0K2Q4SV28XZMXW4ZZTN8QSS5', 'some-contract-name') + const fee = new BN(10) + const nonce = new BN(0) + const [contract_address, contract_name] = 'SP000000000000000000002Q6VF78.long_args_contract'.split('.') + const txOptions = { + anchorMode: AnchorMode.Any, + contractAddress: contract_address, + contractName: contract_name, + functionName: 'stack-stx', + functionArgs: [ + uintCV(20000), + recipient, + intCV(-2), + someCV(listCV([noneCV(), someCV(intCV(-100))])), + contract_principal, + uintCV(20), + BIG_TUPLE, + bufferCV(Buffer.from('abcdefgh', 'ascii')), + ], + network: network, + fee: fee, + nonce: nonce, + publicKey: devicePublicKey, + } + + const transaction = await makeUnsignedContractCall(txOptions) + const serializeTx = transaction.serialize().toString('hex') + + const blob = Buffer.from(serializeTx, 'hex') + const signatureRequest = app.sign(path, blob) + + // Wait until we are not in the main menu + await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()) + + await sim.compareSnapshotsAndApprove('.', `${m.prefix.toLowerCase()}-contract_call_long_args`) + + const signature = await signatureRequest + console.log(signature) + + expect(signature.returnCode).toEqual(0x9000) + + // compute postSignHash to verify signature + + const sigHashPreSign = makeSigHashPreSign( + transaction.signBegin(), + // @ts-ignore + transaction.auth.authType, + transaction.auth.spendingCondition?.fee, + transaction.auth.spendingCondition?.nonce, + ) + console.log('sigHashPreSign: ', sigHashPreSign) + const presig_hash = Buffer.from(sigHashPreSign, 'hex') + + const key_t = Buffer.alloc(1) + key_t.writeInt8(0x00) + + const array = [presig_hash, key_t, signature.signatureVRS] + const to_hash = Buffer.concat(array) + const hash = sha512_256(to_hash) + console.log('computed postSignHash: ', hash.toString('hex')) + + // compare hashes + expect(signature.postSignHash.toString('hex')).toEqual(hash.toString('hex')) + + //Verify signature + const ec = new EC('secp256k1') + const signature1 = signature.signatureVRS.toString('hex') + const signature1_obj = { r: signature1.substr(2, 64), s: signature1.substr(66, 64) } + // @ts-ignore + const signature1Ok = ec.verify(presig_hash, signature1_obj, devicePublicKey, 'hex') + expect(signature1Ok).toEqual(true) + } finally { + await sim.close() + } + }) + test.concurrent.each(models)(`sign_message`, async function (m) { const sim = new Zemu(m.path) const senderKey = '2cefd4375fcb0b3c0935fcbc53a8cb7c7b9e0af0225581bbee006cf7b1aa0216' @@ -831,4 +957,111 @@ describe('Standard', function () { await sim.close() } }) + + test.concurrent.each(models)(`sign_contract_and_post_conditions`, async function (m) { + const sim = new Zemu(m.path) + const network = new StacksTestnet() + const senderKey = '2cefd4375fcb0b3c0935fcbc53a8cb7c7b9e0af0225581bbee006cf7b1aa0216' + const my_key = '2e64805a5808a8a72df89b4b18d2451f8d5ab5224b4d8c7c36033aee4add3f27f' + const path = "m/44'/5757'/0'/0/0" + try { + await sim.start({ ...defaultOptions, model: m.name }) + const app = new StacksApp(sim.getTransport()) + // Get pubkey and check + const pkResponse = await app.getAddressAndPubKey(path, AddressVersion.TestnetSingleSig) + console.log(pkResponse) + expect(pkResponse.returnCode).toEqual(0x9000) + expect(pkResponse.errorMessage).toEqual('No errors') + const devicePublicKey = pkResponse.publicKey.toString('hex') + + const recipient = standardPrincipalCV('ST39RCH114B48GY5E0K2Q4SV28XZMXW4ZZTN8QSS5') + const contract_principal = contractPrincipalCV('ST39RCH114B48GY5E0K2Q4SV28XZMXW4ZZTN8QSS5', 'some-contract-name') + const fee = new BN(10) + const nonce = new BN(0) + const [contract_address, contract_name] = 'SP000000000000000000002Q6VF78.long_args_contract'.split('.') + + const postConditionAddress = 'SP2ZD731ANQZT6J4K3F5N8A40ZXWXC1XFXHVVQFKE' + const postConditionAddress2 = 'ST39RCH114B48GY5E0K2Q4SV28XZMXW4ZZTN8QSS5' + const postConditionAddress3 = 'ST39RCH114B48GY5E0K2Q4SV28XZMXW4ZZTN8QSS5' + const postConditionCode = FungibleConditionCode.GreaterEqual + const postConditionAmount = new BN(1000000) + const postConditionAmount2 = new BN(1005020) + const postConditions = [ + makeStandardSTXPostCondition(postConditionAddress, postConditionCode, postConditionAmount), + makeStandardSTXPostCondition(postConditionAddress2, postConditionCode, postConditionAmount), + makeStandardSTXPostCondition(postConditionAddress3, postConditionCode, postConditionAmount2), + ] + + const txOptions = { + anchorMode: AnchorMode.Any, + contractAddress: contract_address, + contractName: contract_name, + functionName: 'stack-stx', + functionArgs: [ + uintCV(20000), + recipient, + intCV(-2), + someCV(listCV([noneCV(), someCV(intCV(-100))])), + contract_principal, + uintCV(20), + BIG_TUPLE, + bufferCV(Buffer.from('abcdefgh', 'ascii')), + ], + network: network, + fee: fee, + nonce: nonce, + publicKey: devicePublicKey, + postConditions, + } + + const transaction = await makeUnsignedContractCall(txOptions) + const serializeTx = transaction.serialize().toString('hex') + + const blob = Buffer.from(serializeTx, 'hex') + const signatureRequest = app.sign(path, blob) + + // Wait until we are not in the main menu + await sim.waitUntilScreenIsNot(sim.getMainMenuSnapshot()) + + await sim.compareSnapshotsAndApprove('.', `${m.prefix.toLowerCase()}-swap_with_post_conditions`) + + const signature = await signatureRequest + console.log(signature) + + expect(signature.returnCode).toEqual(0x9000) + + // compute postSignHash to verify signature + + const sigHashPreSign = makeSigHashPreSign( + transaction.signBegin(), + // @ts-ignore + transaction.auth.authType, + transaction.auth.spendingCondition?.fee, + transaction.auth.spendingCondition?.nonce, + ) + console.log('sigHashPreSign: ', sigHashPreSign) + const presig_hash = Buffer.from(sigHashPreSign, 'hex') + + const key_t = Buffer.alloc(1) + key_t.writeInt8(0x00) + + const array = [presig_hash, key_t, signature.signatureVRS] + const to_hash = Buffer.concat(array) + const hash = sha512_256(to_hash) + console.log('computed postSignHash: ', hash.toString('hex')) + + // compare hashes + expect(signature.postSignHash.toString('hex')).toEqual(hash.toString('hex')) + + //Verify signature + const ec = new EC('secp256k1') + const signature1 = signature.signatureVRS.toString('hex') + const signature1_obj = { r: signature1.substr(2, 64), s: signature1.substr(66, 64) } + // @ts-ignore + const signature1Ok = ec.verify(presig_hash, signature1_obj, devicePublicKey, 'hex') + expect(signature1Ok).toEqual(true) + } finally { + await sim.close() + } + }) })