diff --git a/CHANGELOG.md b/CHANGELOG.md index 1dcdb432..e28ef150 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.3.3] - 2026-09-01 + +### Added + +- ARC20 tokens support: ETH, SOL, WBTC and USDT +- ARC20 tokens batch private transfer support +- Logic to forbid test/temporary programs on mainnet +- Unit tests, Ragger tests and swap tests for ARC20 tokens and batch transfers + +### Fixed + +- ARC20 batch transfer parsing out-of-band issue +- Out-of-bounds issue with `network_id` +- Unit tests after rebasing +- Ruff format issues and some CodeQL findings + ## [1.3.1] - 2026-09-01 ### Fixed diff --git a/Makefile b/Makefile index 640eab5e..181a71c7 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ APPNAME = "Aleo" # Application version APPVERSION_M = 1 APPVERSION_N = 3 -APPVERSION_P = 1 +APPVERSION_P = 3 APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)" # Application source files diff --git a/fuzzing/CMakeLists.txt b/fuzzing/CMakeLists.txt index c07fc892..c92a083c 100644 --- a/fuzzing/CMakeLists.txt +++ b/fuzzing/CMakeLists.txt @@ -47,6 +47,7 @@ target_include_directories( ${APP_SRC}/transaction ${APP_SRC}/ui ${APP_SRC}/ui/action + ${APP_SRC}/swap ${MSGPACK_SRC} ) diff --git a/src/account/account.c b/src/account/account.c index 52da874a..0b986d77 100644 --- a/src/account/account.c +++ b/src/account/account.c @@ -32,9 +32,6 @@ #include "account.h" -/*#define HASH_INPUT_MAX_LENGTH (8) - -static field_t hash_input[HASH_INPUT_MAX_LENGTH];*/ static char text_buffer[32]; const field_t ACCOUNT_SK_SIG_DOMAIN = { @@ -100,7 +97,6 @@ static int get_seed(const uint32_t *path, uint8_t path_len, field_t *seed) static int private_key_from_seed(const field_t *seed, scalar_t *sk_sig, scalar_t *r_sig) { - //_Static_assert(HASH_INPUT_MAX_LENGTH >= 4, "hash_input size won't fit"); int status = -1; field_t hash_input[4]; @@ -158,7 +154,6 @@ static int view_key_from_private_and_compute_key(const private_key_t *private_ke compute_key_t *compute_key, scalar_t *view_key) { - //_Static_assert(HASH_INPUT_MAX_LENGTH >= 6, "hash_input size won't fit"); int status = -1; field_t hash_input[6]; @@ -197,7 +192,6 @@ static int address_from_view_key(const scalar_t *view_key, group_t *address) static int graph_key_from_view_key(const scalar_t *view_key, field_t *graph_key) { - //_Static_assert(HASH_INPUT_MAX_LENGTH >= 7, "hash_input size won't fit"); int status = -1; field_t hash_input[7]; field_t f_view_key; @@ -439,7 +433,6 @@ int r_list_set(account_t *account, uint8_t index) r = &G_context.r_list.array[index]; // Compute a `r0` as `hash_to_scalar_psd4(domain || sk_sig || nonce)` - //_Static_assert(HASH_INPUT_MAX_LENGTH >= 7, "hash_input size won't fit"); memset(hash_input, 0, sizeof(hash_input)); memcpy(&hash_input[4], &LEDGER_APP_ALEO_DOMAIN, sizeof(field_t)); scalar_to_field(&account->private_key.sk_sig, &hash_input[5]); @@ -471,7 +464,6 @@ int r_list_set(account_t *account, uint8_t index) } // Compute a `rx` as `hash_to_scalar_psd4(domain || sk_sig || nonce || index)` - //_Static_assert(HASH_INPUT_MAX_LENGTH >= 8, "hash_input size won't fit"); memset(hash_input, 0, sizeof(hash_input)); memcpy(&hash_input[4], &LEDGER_APP_ALEO_DOMAIN, sizeof(field_t)); scalar_to_field(&account->private_key.sk_sig, &hash_input[5]); diff --git a/src/account/signature.c b/src/account/signature.c index 6c8c67af..4a058ee3 100644 --- a/src/account/signature.c +++ b/src/account/signature.c @@ -96,6 +96,10 @@ static int plaintext_to_field(uint8_t *plaintext, PRINTF("PLAINTEXT_TYPE_LITERAL_U128\n"); bit_size = 128; break; + case PLAINTEXT_TYPE_LITERAL_IDENTIFIER: + PRINTF("PLAINTEXT_TYPE_LITERAL_IDENTIFIER\n"); + bit_size = PLAINTEXT_TYPE_LITERAL_IDENTIFER_VALUE_LENGTH * 8; + break; default: return -1; break; @@ -443,6 +447,10 @@ static int prepare_inputs(account_t *account, prepared_request_t *request) status = hash_external_record_input(request, input_index); break; + case INPUT_ID_DYNAMIC_RECORD: + status = hash_external_record_input(request, input_index); + break; + default: status = -1; break; diff --git a/src/db/db_program_function.c b/src/db/db_program_function.c index 02eaf513..7cfbf28d 100644 --- a/src/db/db_program_function.c +++ b/src/db/db_program_function.c @@ -317,26 +317,439 @@ const function_parameters_t ldg_p2p_1114_aleo[NB_OF_LDG_P2P_1114_ALEO_FUNCTIONS] = {0x6df5a23c6941d2c8, 0x2bba7da140a71fc8, 0x8b60f455805ab5d9, 0x0305bd8e7d3e4633}}}}, }; +#define NB_OF_LDG_ARC20_P_213_ALEO_FUNCTIONS (12) +const function_parameters_t ldg_arc20_p_213_aleo[NB_OF_LDG_ARC20_P_213_ALEO_FUNCTIONS] = { + {.name = "transfer_private_2", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 5, + .bhp_1024_hashes + = {{.big.u64 + = {0x247b4473e96290f4, 0xf8754bc369a24e4a, 0x53d9cc0cf8bdb808, 0x06f5b3832356bd68}}, + {.big.u64 + = {0x63dce63980f6c551, 0xadb6665333d2e887, 0x505bdada84af5b64, 0x070a8518fed98713}}}}, + {.name = "transfer_private_3", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 6, + .bhp_1024_hashes + = {{.big.u64 + = {0xce94c0e9a26c9304, 0xf540991f4e784af3, 0xf001deea1b56b3f4, 0x0023459f813d2987}}, + {.big.u64 + = {0xab6f1dad4cde07cc, 0xf697c167333d5909, 0xf62069310a501261, 0x06dae020967f4b85}}}}, + {.name = "transfer_private_4", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 7, + .bhp_1024_hashes + = {{.big.u64 + = {0x4f07f0b8621283c9, 0x4ed8ff802dffcb57, 0x72cee4df8990e1f0, 0x050a7ca1e4d2e52e}}, + {.big.u64 + = {0x393cc9e45c678aa5, 0xe6ca9eb344ddf63a, 0x823c99d2eae822e7, 0x03795339cdfc2cc6}}}}, + {.name = "transfer_private_5", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 8, + .bhp_1024_hashes + = {{.big.u64 + = {0x18d45b0b51d78f69, 0x7c1b853ad0716caf, 0x86add96f5aa5aff1, 0x00072c33530c6209}}, + {.big.u64 + = {0xce196e7841f4b698, 0xb19bfcebc0d9d9ff, 0xa79daf0ef29c5acf, 0x03ffb02834a4908f}}}}, + {.name = "transfer_private_6", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 9, + .bhp_1024_hashes + = {{.big.u64 + = {0xdd082ffbad8dc56a, 0xa2c23d59457986ef, 0x59ba397b085f8f35, 0x0490b53f070b11b3}}, + {.big.u64 + = {0xb17af48457c01ebf, 0xb77c21fee426341d, 0xa48257fd4fccca9c, 0x065525cdd34b2e1a}}}}, + {.name = "transfer_private_7", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 10, + .bhp_1024_hashes + = {{.big.u64 + = {0x4853bfbb2c487c88, 0xc9817b0adddb3bfc, 0x25a2d9ba27ab0b7b, 0x0bb7a4188f287a84}}, + {.big.u64 + = {0x57be29e5fb004f15, 0x340aea04a6bff79f, 0x4da6faa2f0498679, 0x0fca8efecca8428f}}}}, + {.name = "transfer_private_8", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 11, + .bhp_1024_hashes + = {{.big.u64 + = {0x31c0050e8e69f242, 0xb4dfd08c5b0719a9, 0x17d83388c985ca48, 0x0a7818b16c66f731}}, + {.big.u64 + = {0x73a92bd19b517e84, 0x037ed8bfa0cf406b, 0x147e5fded5442eee, 0x12a2d31cd2bc48e8}}}}, + {.name = "transfer_private_9", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 12, + .bhp_1024_hashes + = {{.big.u64 + = {0xfd4871098045ccee, 0xa4356c66e80b1971, 0x7a811438d363fc66, 0x0c7d4857577b2b46}}, + {.big.u64 + = {0x7dc616fe64c155ea, 0x31dabe54f77fc3be, 0x9ca57ac8436f8430, 0x075bc52489f6f004}}}}, + {.name = "transfer_private_10", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 13, + .bhp_1024_hashes + = {{.big.u64 + = {0x43d5c939fd89832a, 0xd3151bfaf1988345, 0x0f3b87867a1b5221, 0x0128397c4bb2c432}}, + {.big.u64 + = {0xdf54f29963d3cfd6, 0xd56f564f863d3ed0, 0x89a1e24fdee6f606, 0x0a78155c1790b26f}}}}, + {.name = "transfer_private_11", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 14, + .bhp_1024_hashes + = {{.big.u64 + = {0x2862d96ffd7800ca, 0xb23049f321ec28f5, 0x0233b764cad33dc3, 0x081112033f964005}}, + {.big.u64 + = {0xc0d44f94a29476e6, 0x5709ec867efec54e, 0x2533f94331c88f87, 0x0c0762d8aa4fb567}}}}, + {.name = "transfer_private_12", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 15, + .bhp_1024_hashes + = {{.big.u64 + = {0xc3f1c98893489259, 0x35270e6b1b6eeeb0, 0x68fcc028dede8ded, 0x11b5be57caa74c37}}, + {.big.u64 + = {0x73eead9b3c9d6b15, 0x8601725286feb8f7, 0xcfdbc35d2db654a5, 0x02f8b35225a2bfbe}}}}, + {.name = "transfer_private_13", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 16, + .bhp_1024_hashes + = {{.big.u64 + = {0xec64de2c8f2c152d, 0xbe79f4b9581aef50, 0x49358cc9ff79e133, 0x03a7eaec501aced9}}, + {.big.u64 + = {0x6fb9e4a1fcece715, 0x4b22f21bba215e7f, 0x1cb518feebcab375, 0x0d22c7798c71c7ac}}}}, +}; + +#define NB_OF_LDG_ARC20_P2P_213_ALEO_FUNCTIONS (12) +const function_parameters_t ldg_arc20_p2p_213_aleo[NB_OF_LDG_ARC20_P2P_213_ALEO_FUNCTIONS] = { + {.name = "transfer_private_to_public_2", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 5, + .bhp_1024_hashes + = {{.big.u64 + = {0xa49c082b89d3c182, 0xbdfb963c6f3cebb5, 0xe36631cef579f98a, 0x1099a729fb474157}}, + {.big.u64 + = {0xa0ebbdd30ce87057, 0x7cf80b187642ab51, 0xe8bee3b31fa0d332, 0x10e23dada94279b5}}}}, + {.name = "transfer_private_to_public_3", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 6, + .bhp_1024_hashes + = {{.big.u64 + = {0x958c00f1d7f23377, 0x7f7db7bdd2179d70, 0xd1ccc59a2e759efd, 0x0a95a4aff164b829}}, + {.big.u64 + = {0x80fbf673ea0d4eab, 0x41e46e53e948968b, 0x77f4f1a526f2876c, 0x0bdd18f532bda35a}}}}, + {.name = "transfer_private_to_public_4", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 7, + .bhp_1024_hashes + = {{.big.u64 + = {0x4b43e77f8ff2bdfc, 0x3a686606139e55f1, 0x8efbbf73d084889e, 0x0332d35bbe45f2ea}}, + {.big.u64 + = {0xb4ec9c8f4231c4f4, 0x1e3a227d2b4572a9, 0xc6be05d7d0f1f703, 0x03c5d4e27979eaa6}}}}, + {.name = "transfer_private_to_public_5", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 8, + .bhp_1024_hashes + = {{.big.u64 + = {0x3791df1aeaf47e77, 0x5358e474e38e088d, 0x25b53b630986ffe0, 0x04b214cf4a27c07d}}, + {.big.u64 + = {0xd96a3f5ccce2044a, 0xa8aefb78369475ea, 0x89dfe72f810f731e, 0x0fa38b1d75fa2be9}}}}, + {.name = "transfer_private_to_public_6", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 9, + .bhp_1024_hashes + = {{.big.u64 + = {0x916fc5a67f4163f7, 0xcff14c8745e84535, 0xb2652851251ca9ea, 0x12070e0b325bfbd4}}, + {.big.u64 + = {0x44e7faca31776a87, 0x8a86c689ec1f1cfc, 0x20368ad8e6792aa8, 0x0a3c5c7f2d800db6}}}}, + {.name = "transfer_private_to_public_7", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 10, + .bhp_1024_hashes + = {{.big.u64 + = {0x9547d4563668870f, 0xf96ef08dd7a1c971, 0xf409ad22e0ff0380, 0x014f2a6402cba355}}, + {.big.u64 + = {0x41ed115ded7de160, 0x9b4ad807ab6c5184, 0xc6e77073d00c2cb7, 0x0cc42ca242eb9180}}}}, + {.name = "transfer_private_to_public_8", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 11, + .bhp_1024_hashes + = {{.big.u64 + = {0x2ea7cff038d63cc6, 0xf475735fbf254f35, 0x9c3ccefef0e358f4, 0x0ea49c33deabaa0b}}, + {.big.u64 + = {0x1c0de3a0dcfa95bf, 0xb01f8d71a8452c87, 0x937a00bba2b9b678, 0x020ccfc6d79c3e66}}}}, + {.name = "transfer_private_to_public_9", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 12, + .bhp_1024_hashes + = {{.big.u64 + = {0xff56eb0731b94b3e, 0xe765753ae81bb66a, 0x94a78f75f88ac111, 0x0ad3f4b30a36ae03}}, + {.big.u64 + = {0x43896b1d9e6d700e, 0xca5ecaa28484ece1, 0xc2f07604b69bf326, 0x08bd13a9e5e39846}}}}, + {.name = "transfer_private_to_public_10", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 13, + .bhp_1024_hashes + = {{.big.u64 + = {0xe5946fe4f83135d3, 0xb11b8410f4740a69, 0xe12d1ba0d3969c94, 0x040f176abc37ed56}}, + {.big.u64 + = {0x6934c2b5d5e22078, 0x6300164506d7a279, 0xd9e53d9f10c635de, 0x002fe9c42e35c1b6}}}}, + {.name = "transfer_private_to_public_11", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 14, + .bhp_1024_hashes + = {{.big.u64 + = {0xd51927847d99b942, 0x889fe9f1fa58465c, 0x51e7bd834e737789, 0x0684ac1468e0bb96}}, + {.big.u64 + = {0xfcae953e781e4f0f, 0x210836c7d2ada53a, 0x5d830aa654b31bcb, 0x025fcc8501a84e7d}}}}, + {.name = "transfer_private_to_public_12", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 15, + .bhp_1024_hashes + = {{.big.u64 + = {0x0bd63fd1d7a11ae1, 0xb47ee71ca387838f, 0xe32ac39c29bf9d57, 0x0853718d1e8582cb}}, + {.big.u64 + = {0x188999520beb95dc, 0x9118f5f05d1e3ce5, 0x98c6555437bdba0f, 0x0d2c08905ac2c94a}}}}, + {.name = "transfer_private_to_public_13", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 16, + .bhp_1024_hashes + = {{.big.u64 + = {0x461e7134a8916fe9, 0x95e997641950a73a, 0x208c6f8caacec6aa, 0x0087223c69feb640}}, + {.big.u64 + = {0x1a4939ca02db1641, 0x1f22d0b3efb04814, 0x9ae5b70748b8e0ff, 0x08b7a784691b59a2}}}}, +}; + +#define NB_OF_MM2_LDG_ARC20_P_213_ALEO_FUNCTIONS (12) +const function_parameters_t mm2_ldg_arc20_p_213_aleo[NB_OF_MM2_LDG_ARC20_P_213_ALEO_FUNCTIONS] = { + {.name = "transfer_private_2", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 5, + .bhp_1024_hashes + = {{.big.u64 + = {0x71d05dfd545df9b9, 0xec936758bebf4a5b, 0xe8200b8b277d49d1, 0x1022dca37d40b814}}, + {.big.u64 + = {0x1940ad51676ebe8f, 0x15c3433143841b16, 0xc6df6714347e80ad, 0x04d8474c078a369f}}}}, + {.name = "transfer_private_3", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 6, + .bhp_1024_hashes + = {{.big.u64 + = {0xf0c606d93d5d66a4, 0x5641da4ec2aa6251, 0xfcbd1111896695c0, 0x0949884d613105f9}}, + {.big.u64 + = {0x22e413abae6f2d5c, 0x4e0a143176b80728, 0x222d98a513c61ad7, 0x07967ead4b53b4b9}}}}, + {.name = "transfer_private_4", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 7, + .bhp_1024_hashes + = {{.big.u64 + = {0x21748922f27dc733, 0xfcd40d926a7c7278, 0x4077ed96706c5125, 0x0f559d42e0c2bb5a}}, + {.big.u64 + = {0xeb73f548fcbab10b, 0xdf5a2e331ce43129, 0x87eb8526ef582f7c, 0x0fdedbb0ced9a58b}}}}, + {.name = "transfer_private_5", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 8, + .bhp_1024_hashes + = {{.big.u64 + = {0x5064a6d676edade7, 0x5d3a2ed8fb994807, 0xacfb976f719d7534, 0x12857d17f9f77228}}, + {.big.u64 + = {0xd9a45b319a6dfd22, 0x6ba9e50424c34d7c, 0xdf4ff4de94adc24c, 0x08214d5716726872}}}}, + {.name = "transfer_private_6", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 9, + .bhp_1024_hashes + = {{.big.u64 + = {0x1a4560631215de7c, 0xc511b07f85002c60, 0xedd5493a369cd51e, 0x027551427fa0b1d2}}, + {.big.u64 + = {0x4a80c8d9698df9a7, 0x5a48d9d5c723eb39, 0x819a6740fe2002a1, 0x1114e4c2f3741eea}}}}, + {.name = "transfer_private_7", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 10, + .bhp_1024_hashes + = {{.big.u64 + = {0xd398fb701f342df3, 0xc09270ef4f7b8f00, 0x44c4e02542492c5a, 0x0489ccaa6b9405e8}}, + {.big.u64 + = {0x81d881db695cc7e9, 0x931dbb5c3d64c079, 0x889e1a2d07a80261, 0x0dc01f7aee1f77d2}}}}, + {.name = "transfer_private_8", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 11, + .bhp_1024_hashes + = {{.big.u64 + = {0xb50c095e96a73c87, 0x3c95ad3b963831e1, 0xa9b1548364f98630, 0x03f23c346b03b9c3}}, + {.big.u64 + = {0x21dc74211e00e655, 0xa9ff43a87836fc50, 0xe630790c02609e0d, 0x09a313e59f6654fa}}}}, + {.name = "transfer_private_9", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 12, + .bhp_1024_hashes + = {{.big.u64 + = {0x7ad84c6c7b75ef59, 0xed121c845ee552a9, 0x35f1c63622d668b6, 0x0226722ae96a9be4}}, + {.big.u64 + = {0x58f84c14f56fd54b, 0xf92250c9111caeba, 0x7319ef7f3e273242, 0x0729acffd82d000e}}}}, + {.name = "transfer_private_10", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 13, + .bhp_1024_hashes + = {{.big.u64 + = {0xb385d3df072eb4ee, 0x5448fa93872dcbab, 0xc7acb2b94af464bb, 0x07956f8d227151b6}}, + {.big.u64 + = {0xbd60c8db28daca20, 0x2b8e16667b28548a, 0x6974f5ef51179707, 0x061b3ff5cce853bc}}}}, + {.name = "transfer_private_11", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 14, + .bhp_1024_hashes + = {{.big.u64 + = {0x6e4e42fa789a4aef, 0xa0e3b95a9e9c8d92, 0xafb9c5570f408497, 0x0aa1d0851befdc79}}, + {.big.u64 + = {0xc300e9a08ef52790, 0x01708f3b7a843fce, 0x910c57dddb1ae70a, 0x12055159e9407336}}}}, + {.name = "transfer_private_12", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 15, + .bhp_1024_hashes + = {{.big.u64 + = {0xed4620dc165498b9, 0x6c2cf3d658ae3c21, 0xf43948ebf977f160, 0x0f5f8fae21fc4835}}, + {.big.u64 + = {0xf067299657d35e12, 0x1c12bd17e5128b6d, 0x8aaffc686caa9e17, 0x0c656cdb4e34152e}}}}, + {.name = "transfer_private_13", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + .input_count = 16, + .bhp_1024_hashes + = {{.big.u64 + = {0xa602f4e16b8d2dec, 0xe7bf4ae7b683d053, 0x503ef05d30e33e30, 0x09200f569c1d4ebc}}, + {.big.u64 + = {0x630e957d5137a5ea, 0xf28fd476412e0996, 0x539b303a7e6088ae, 0x10f93c5ee9cfa0dc}}}}, +}; + +#define NB_OF_MM1_LDG_ARC20_P2P_213_ALEO_FUNCTIONS (12) +const function_parameters_t mm1_ldg_arc20_p2p_213_aleo[NB_OF_MM1_LDG_ARC20_P2P_213_ALEO_FUNCTIONS] + = { + {.name = "transfer_private_to_public_2", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 5, + .bhp_1024_hashes + = {{.big.u64 + = {0x3a7edc37ddd71a0d, 0x5757ce9695d56342, 0x4e2906594c3a2b15, 0x0d82755a7672fd60}}, + {.big.u64 + = {0xed521d918da4b912, 0xeee25e6710e970ee, 0x2717b6cf79fd32c6, 0x01c099402e82840e}}}}, + {.name = "transfer_private_to_public_3", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 6, + .bhp_1024_hashes + = {{.big.u64 + = {0xa31a05b2ef5af393, 0x4fb2c0070c779050, 0x256a3a80c2cc2fff, 0x0b682db02d3c8da8}}, + {.big.u64 + = {0xb603e9ec78b8c607, 0xf13397cb4fb6288c, 0x87a5cf553161d9d6, 0x08cb279b035ea502}}}}, + {.name = "transfer_private_to_public_4", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 7, + .bhp_1024_hashes + = {{.big.u64 + = {0x6fe918ca9c1ebf4c, 0x3048019895d389d1, 0x7a9712ceea082236, 0x0053f06c1e9e4634}}, + {.big.u64 + = {0xb9924e81df069ec1, 0xf6424c5665931838, 0xadadb2b000d87100, 0x06ff773f7397a7b2}}}}, + {.name = "transfer_private_to_public_5", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 8, + .bhp_1024_hashes + = {{.big.u64 + = {0x3f7d8f96600f4413, 0x6e928a84dbb8f3e2, 0x7e22ea8b7d122a88, 0x0f2b0d7b570b29dc}}, + {.big.u64 + = {0x78aebb0904305965, 0xfe9a0725ac40eee8, 0x43f138916a6d6b34, 0x0bc485f8b97a14c0}}}}, + {.name = "transfer_private_to_public_6", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 9, + .bhp_1024_hashes + = {{.big.u64 + = {0x812670b3f18d3839, 0x508dbfa2ae8f210d, 0x72454477db0f349f, 0x069303db87f8ecf9}}, + {.big.u64 + = {0xe4a33e547e93c3c8, 0x280ecf9709f52afc, 0x9ce893bec1d8498e, 0x041ae6dbe5e84555}}}}, + {.name = "transfer_private_to_public_7", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 10, + .bhp_1024_hashes + = {{.big.u64 + = {0x38356baf5405c66e, 0xb182e87347a6a7ee, 0xc21fa69c584f3e54, 0x109e38c34df7ed40}}, + {.big.u64 + = {0xcb96d14b605574d8, 0xe50afea56fee9c95, 0x5d1953e3f1f1f8bb, 0x0650d7f13db41145}}}}, + {.name = "transfer_private_to_public_8", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 11, + .bhp_1024_hashes + = {{.big.u64 + = {0x82086f9ba5b3678e, 0xd56a926c92b27371, 0x4b8145a3fc7f9cc7, 0x086f045aeaa10e0f}}, + {.big.u64 + = {0x6926abe0bfb98ad1, 0xe6e52c8bc2e266b0, 0x48ffb59481932d8a, 0x00a15cb849ff1cce}}}}, + {.name = "transfer_private_to_public_9", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 12, + .bhp_1024_hashes + = {{.big.u64 + = {0xd29085ba179f3183, 0x24ed8eae1759150c, 0xafd8499b4110df9e, 0x029ae3d5001e0121}}, + {.big.u64 + = {0x90419aac5deb21a6, 0x126a66db2937bbe5, 0x513311f2f484b243, 0x10d6eacebf6d419e}}}}, + {.name = "transfer_private_to_public_10", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 13, + .bhp_1024_hashes + = {{.big.u64 + = {0xe5bbcfb8c14541e0, 0x743da43f863dec62, 0x07a10a765412dba6, 0x0e8d3cfeb88cd4ba}}, + {.big.u64 + = {0x161e7b4310c85c21, 0x4eb8ce0e12784745, 0x8896c3ed1552d753, 0x0cf549936a300e5e}}}}, + {.name = "transfer_private_to_public_11", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 14, + .bhp_1024_hashes + = {{.big.u64 + = {0x3191c2f4d9d93fa3, 0xf252e411b8d5bbb6, 0xa580c2597b3af334, 0x031fb49e9b1bfe68}}, + {.big.u64 + = {0x9ff3b86c37a413ea, 0x807119366c96b7c7, 0xfdb01bf8fbb1f9d9, 0x11f8d2f0854925ce}}}}, + {.name = "transfer_private_to_public_12", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 15, + .bhp_1024_hashes + = {{.big.u64 + = {0xb95d3fa38c097d53, 0xfdbdeb9f0a34fc47, 0x67c10d8addca3315, 0x02aeff9fa837536b}}, + {.big.u64 + = {0x08e050992dc54a68, 0xc6b73689a8270eab, 0x97aa7a22865ff1ee, 0x050c6f504e35c7f2}}}}, + {.name = "transfer_private_to_public_13", + .tx_type = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + .input_count = 16, + .bhp_1024_hashes + = {{.big.u64 + = {0xe9bb41e743a49806, 0xf923154656787186, 0xcdeac1eed89e30c1, 0x11e6901bff925463}}, + {.big.u64 + = {0x1ca2e8e3ba609607, 0x9ebab2e8511e2a06, 0x3c98d64e92223f28, 0x1196ed993a521601}}}}, +}; + const program_parameter_t program_parameters[NB_OF_PROGRAMS] = { {.program_id = "credits.aleo", .nb_of_functions = NB_OF_CREDITS_ALEO_FUNCTIONS, - .functions = credits_aleo }, + .functions = credits_aleo }, {.program_id = "ldg_p_28.aleo", .nb_of_functions = NB_OF_LDG_P_28_ALEO_FUNCTIONS, - .functions = ldg_p_28_aleo }, + .functions = ldg_p_28_aleo }, {.program_id = "ldg_p_910.aleo", .nb_of_functions = NB_OF_LDG_P_910_ALEO_FUNCTIONS, - .functions = ldg_p_910_aleo }, + .functions = ldg_p_910_aleo }, {.program_id = "ldg_p_1114.aleo", .nb_of_functions = NB_OF_LDG_P_1114_ALEO_FUNCTIONS, - .functions = ldg_p_1114_aleo }, + .functions = ldg_p_1114_aleo }, {.program_id = "ldg_p2p_28.aleo", .nb_of_functions = NB_OF_LDG_P2P_28_ALEO_FUNCTIONS, - .functions = ldg_p2p_28_aleo }, + .functions = ldg_p2p_28_aleo }, {.program_id = "ldg_p2p_910.aleo", .nb_of_functions = NB_OF_LDG_P2P_910_ALEO_FUNCTIONS, - .functions = ldg_p2p_910_aleo }, + .functions = ldg_p2p_910_aleo }, {.program_id = "ldg_p2p_1114.aleo", .nb_of_functions = NB_OF_LDG_P2P_1114_ALEO_FUNCTIONS, - .functions = ldg_p2p_1114_aleo}, + .functions = ldg_p2p_1114_aleo }, + {.program_id = "ldg_arc20_p_213.aleo", + .nb_of_functions = NB_OF_LDG_ARC20_P_213_ALEO_FUNCTIONS, + .functions = ldg_arc20_p_213_aleo }, + {.program_id = "ldg_arc20_p2p_213.aleo", + .nb_of_functions = NB_OF_LDG_ARC20_P2P_213_ALEO_FUNCTIONS, + .functions = ldg_arc20_p2p_213_aleo }, + {.program_id = "mm2_ldg_arc20_p_213.aleo", + .nb_of_functions = NB_OF_MM2_LDG_ARC20_P_213_ALEO_FUNCTIONS, + .functions = mm2_ldg_arc20_p_213_aleo }, + {.program_id = "mm1_ldg_arc20_p2p_213.aleo", + .nb_of_functions = NB_OF_MM1_LDG_ARC20_P2P_213_ALEO_FUNCTIONS, + .functions = mm1_ldg_arc20_p2p_213_aleo}, }; diff --git a/src/db/db_program_function.h b/src/db/db_program_function.h index 9f6f24b6..a5b4fc2b 100644 --- a/src/db/db_program_function.h +++ b/src/db/db_program_function.h @@ -11,5 +11,5 @@ typedef struct { const function_parameters_t *functions; } program_parameter_t; -#define NB_OF_PROGRAMS (7) +#define NB_OF_PROGRAMS (11) extern const program_parameter_t program_parameters[NB_OF_PROGRAMS]; diff --git a/src/db/db_tokens.c b/src/db/db_tokens.c index 3987f71f..33d427ca 100644 --- a/src/db/db_tokens.c +++ b/src/db/db_tokens.c @@ -537,6 +537,338 @@ const function_parameters_t ldg_usdcx_p2p_1113_aleo[NB_OF_LDG_USDCX_P2P_1113_ALE = {0x1b7237c1a9b16e65, 0x6e553acd1a2d8e98, 0x58c16f8729c90add, 0x0543239db02e00e0}}}}, }; +#define NB_OF_ARC20_ETH_ALEO_FUNCTIONS (5) +const function_parameters_t arc20_eth_aleo[NB_OF_ARC20_ETH_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x35d7e75e06dc3355, 0x6e765a5e39df3179, 0xb53b8abf3b30e915, 0x092df8fa7f55f541}}, + {.big.u64 + = {0x638f40bd00be6098, 0xc4834ab91e76d405, 0xc9b081f19b8c959e, 0x107b98b1e9a4c64a}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0x84c56df9e018046e, 0xc510824c8429a5cd, 0xea471d636eb045c1, 0x111edb256861d6a4}}, + {.big.u64 + = {0x0fe47ca436ee3d55, 0xebac7fbd6a1fcb5a, 0xd6da0962fd85db39, 0x0b465f671390ab65}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x0b7e6878a4c0ace7, 0x343931c6a3db9616, 0xf0d5477066012ebb, 0x0343395368c89c8b}}, + {.big.u64 + = {0xe12333131b84f0be, 0x2aa2b196f677a253, 0x3b6e85b78a9a341a, 0x10cdd7f2cf06a5c9}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0xad5ae9315181a53d, 0xdc32d787df823022, 0x93c50e0aa6fc7d1b, 0x0069796b9441e91b}}, + {.big.u64 + = {0x4b7c02204565b34a, 0x6a67ab3d8d1cc22f, 0x4b86f7f298e7e183, 0x0ce2f39d97bc1595}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0xe6bd2c5084e94da1, 0x4d500e9fd155d6db, 0x4e0e491195b8c6b0, 0x0ada5586fda1028b}}, + {.big.u64 + = {0xf5759b7c8d097ea9, 0xe754586ecd31823e, 0x099226425edca9da, 0x09ba9fe6b3f7a766}}}}, +}; + +#define NB_OF_ARC20_SOL_ALEO_FUNCTIONS (5) +const function_parameters_t arc20_sol_aleo[NB_OF_ARC20_SOL_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x722290b3fcf27222, 0x48f0064a4a1a17a2, 0x32a9e96d0bd475e0, 0x05f04195af0575ee}}, + {.big.u64 + = {0x468d8fe0f24992e2, 0x19af91d133ed4689, 0x2404df2e7b591c83, 0x0fca85a97aff0e68}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0x0e9a7491f1444c6c, 0xe486c8bbcfed8c5d, 0x626d6bec1cee4d65, 0x0d5024b956db1a39}}, + {.big.u64 + = {0xae66cc0777b913ab, 0xc333cf15b55db95d, 0x97ae46b08ea6bb49, 0x0643134bed89ee7a}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0xd82159982578d05e, 0x96b26114c888a6cb, 0x13bbee56538a98d6, 0x03102c566ea5cc0d}}, + {.big.u64 + = {0xe3e18ee236346047, 0x4094b3e5ecafcf41, 0x7483576b8d0d62e9, 0x0997a795695095a4}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0xdc1bb8faaca68fcf, 0x15b44350d5b00fac, 0xb53a73cb7d505da4, 0x1100637060c83625}}, + {.big.u64 + = {0xbc29b00f7fa12b00, 0x5c4ce77c11bbba28, 0x4f05be65fb4beb58, 0x0210354b995f64d3}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x7dd72e84e3d1f853, 0x2c42215e5ead7cc4, 0x0ce8b70f52f32d9a, 0x01cc6bd48fb9152b}}, + {.big.u64 + = {0xa00d5c3da6669262, 0x3272249c7b8366c1, 0x0526ec59bffdd043, 0x0389705cf3bfa9d5}}}}, +}; + +#define NB_OF_ARC20_WBTC_ALEO_FUNCTIONS (5) +const function_parameters_t arc20_wbtc_aleo[NB_OF_ARC20_WBTC_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x2be435f908f95efe, 0x0cadf314438b5c04, 0xb0098ff5e7e2b642, 0x0066bb15c3f4f900}}, + {.big.u64 + = {0x62e8af72e3712b7e, 0x884773e62cfe03d6, 0x53c3d9a618db9a23, 0x0715713b4e8cf782}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0xc151034126d469a6, 0x92693f0fe655566f, 0x3f2f007b0df88a11, 0x0c9d5a188b976a60}}, + {.big.u64 + = {0xdc715bd54ea5a87d, 0x42e32485b366ceef, 0x5a771bf3a148fae3, 0x0ebd9edeadf1ab04}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x4ea984df4fac92de, 0x5ab9d567343b4fe6, 0xbc9168f6dc26dcfe, 0x0cb0248a3bbe3701}}, + {.big.u64 + = {0x37d24603175b8293, 0x80a48b4f92223073, 0xf6d2e344889766f2, 0x0009ddd546a53012}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0x9b5c78b7a73e544b, 0x14d04087899e9e57, 0x19a29713c890f892, 0x060b20017492c473}}, + {.big.u64 + = {0x217e034428a18819, 0xd75af76c8faac657, 0xa72d7110b9c8ebdb, 0x0ace8b1c927d03fc}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x4351a0eaf9adef9c, 0xf4723b52c8411e41, 0x897334332e3df913, 0x0b0fbbf1c919e6d6}}, + {.big.u64 + = {0xe5609f5f42b43dd8, 0x0f5e46423090d834, 0x94df47440098335a, 0x024edcf562645d90}}}}, +}; + +#define NB_OF_ARC20_USDT_ALEO_FUNCTIONS (5) +const function_parameters_t arc20_usdt_aleo[NB_OF_ARC20_USDT_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0xf3159cc5d32524ed, 0x515a316b0151a318, 0x06319e6f4abc338d, 0x0a2757d01f3c7ce7}}, + {.big.u64 + = {0xd3befd07f4d8d872, 0x6883472c674ef280, 0x46f2f609960d2633, 0x0ccfe2619a0fa543}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0x72590665115bad8a, 0xa94f314304983a4c, 0xc3015b64ed9a0a46, 0x09555ba0454becec}}, + {.big.u64 + = {0x04646e729e3d2349, 0x908efed7a4d1d413, 0x768c29b8c62c4d20, 0x02f9912e4dcaa756}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0x9cab0638f9db4555, 0x620dfa2aced164b6, 0x999fd681321337f8, 0x04aa82a6307e340a}}, + {.big.u64 + = {0x670fb8d8b1a25275, 0x5345fdc30e8a1f84, 0x46640bc1329e9343, 0x0c034ad6228edffb}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 + = {0x90e5b1500a1bb4ec, 0xbdec9a1c6b8d23e9, 0xb3fdd9f96e102947, 0x03e92e2ac77e1ea1}}, + {.big.u64 + = {0x64b4fd40f694e260, 0x6f9e6aa57653e5dc, 0x91118f06fbdf06c4, 0x1207e11848aaff90}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 + = {0xb9566658ac7f9f7a, 0x6118f8c750e17a9b, 0x0ccadfda1fb6f316, 0x0b6e70ee16c900b0}}, + {.big.u64 + = {0xa1c317ed897576d8, 0x08f4ac3c9eaa4de5, 0x33e7137e4a3c18a4, 0x07fec3266cdce64c}}}}, +}; + +#define NB_OF_TEST_ARC20_ETH_ALEO_FUNCTIONS (5) +const function_parameters_t test_arc20_eth_aleo[NB_OF_TEST_ARC20_ETH_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xd982702ee4fa1fed, 0xee8131f980e8a23c, 0xd5e18c4864869d5d, 0x003549cea9de63bc}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x9ad98e9cd6025d8b, 0x12aa4669fcef6334, 0x7c84cccb18961d1d, 0x00c5dbd842f37cea}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xf316b9f1181025e7, 0x7c64fa96e1103969, 0x7e62d802348c5400, 0x0ff7633bb80e0ed6}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x53b45bc56e007d3a, 0xfd3b56719c3a01cc, 0x0556d87e727633a2, 0x01da4bd45a0f375b}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x9408876a879c2e66, 0x587a29f2f27b3926, 0x4ef01de21d0da147, 0x0c3bd556f2f3eb1d}}}}, +}; + +#define NB_OF_TEST_ARC20_SOL_ALEO_FUNCTIONS (5) +const function_parameters_t test_arc20_sol_aleo[NB_OF_TEST_ARC20_SOL_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x51afa5b2cc2d274c, 0x26a0b58f9b746718, 0x0c0fa9f037ff40df, 0x127ecfd161f98cf7}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x81087363e3c82a57, 0x8d87cf4a13305ab2, 0xc787d55cad2d645e, 0x0c3c49f9f27170ef}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x0db825d7945d3b5e, 0xaedd313827448022, 0xc8888509b5925ed5, 0x0f51f62e53b7769b}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xe5b94946d62ab039, 0xcc20fb1564672f52, 0x1c2cfdf8dbdfc90b, 0x068d6741b6cd35b3}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x8525b928000b92a3, 0x44b41fd0fc7d549f, 0x0cd08286c079f95a, 0x09335ca02fef4bee}}}}, +}; + +#define NB_OF_TEST_ARC20_WBTC_ALEO_FUNCTIONS (5) +const function_parameters_t test_arc20_wbtc_aleo[NB_OF_TEST_ARC20_WBTC_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x1d32e01da5c2c782, 0xd5a5c63c521f7875, 0x087e75b663499f41, 0x04c5f862f403f98a}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xd8506ad7009e85b9, 0xc40e98d33b7f55de, 0x2a333db881648d9f, 0x0634384f065f571a}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x4a89882240c7be28, 0x7d34ee625a1c44a5, 0x9ed1710e141865a9, 0x012678d256b73211}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xe7750eb381c5c3c1, 0x60ca0278c0188bc9, 0xacb993811b09efc4, 0x0d31b46cc974f810}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xaeb0115fde0ed18e, 0x96dde1eaf4b0437a, 0x786c5ba8f0c0d01b, 0x0e9c354e064d8df3}}}}, +}; + +#define NB_OF_TEST_ARC20_USDT_ALEO_FUNCTIONS (5) +const function_parameters_t test_arc20_usdt_aleo[NB_OF_TEST_ARC20_USDT_ALEO_FUNCTIONS] = { + {.name = "transfer_public", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xebabb9fdddfd65c8, 0x9ada1d08c7c32162, 0x810365206285afca, 0x0fcf16becceb7b4a}}}}, + {.name = "transfer_private", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x362d860c375846e6, 0x45264c613ed4cbe2, 0x119ab2abaa5ee553, 0x005a541602adcdae}}}}, + {.name = "transfer_public_to_private", + .tx_type = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x6df9729b0357177e, 0x28ec12988cd05ef3, 0x79698c8d060c3c8f, 0x0e0f331aa9e9054f}}}}, + {.name = "transfer_private_to_public", + .tx_type = TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, + .input_count = 3, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0xeb744bc663bde3d0, 0xbef2d75bad0b954a, 0x3675f24319ed5ad7, 0x0bbad6e395377159}}}}, + {.name = "join", + .tx_type = TX_TOKEN_JOIN, + .input_count = 2, + .bhp_1024_hashes + = {{.big.u64 = {0x00, 0x00, 0x00, 0x00}}, + {.big.u64 + = {0x9442fc415bd3fb7a, 0x27eb97671660caa6, 0x462099fbf7b2db0c, 0x09e5284f996ea9af}}}}, +}; + const token_parameter_t token_parameters[NB_OF_TOKENS] = { {.program_id = "usad_stablecoin.aleo", .display_info = {.type = TOKEN_TYPE_ARC22, .ticker = "USAD", .decimals = 6}, @@ -636,4 +968,60 @@ const token_parameter_t token_parameters[NB_OF_TOKENS] = { = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, .nb_of_functions = NB_OF_LDG_USDCX_P2P_1113_ALEO_FUNCTIONS, .functions = ldg_usdcx_p2p_1113_aleo}, + {.program_id = "arc20_eth.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "ETH", .decimals = 18}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_ARC20_ETH_ALEO_FUNCTIONS, + .functions = arc20_eth_aleo }, + {.program_id = "arc20_sol.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "SOL", .decimals = 9}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_ARC20_SOL_ALEO_FUNCTIONS, + .functions = arc20_sol_aleo }, + {.program_id = "arc20_wbtc.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "WBTC", .decimals = 8}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_ARC20_WBTC_ALEO_FUNCTIONS, + .functions = arc20_wbtc_aleo }, + {.program_id = "arc20_usdt.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "USDT", .decimals = 6}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_ARC20_USDT_ALEO_FUNCTIONS, + .functions = arc20_usdt_aleo }, + {.program_id = "test_arc20_eth.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "ETH", .decimals = 18}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_TEST_ARC20_ETH_ALEO_FUNCTIONS, + .functions = test_arc20_eth_aleo }, + {.program_id = "test_arc20_sol.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "SOL", .decimals = 9}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_TEST_ARC20_SOL_ALEO_FUNCTIONS, + .functions = test_arc20_sol_aleo }, + {.program_id = "test_arc20_wbtc.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "WBTC", .decimals = 8}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_TEST_ARC20_WBTC_ALEO_FUNCTIONS, + .functions = test_arc20_wbtc_aleo }, + {.program_id = "test_arc20_usdt.aleo", + .display_info = {.type = TOKEN_TYPE_ARC20, .ticker = "USDT", .decimals = 6}, + .token_id + = {.big.u64 + = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000}}, + .nb_of_functions = NB_OF_TEST_ARC20_USDT_ALEO_FUNCTIONS, + .functions = test_arc20_usdt_aleo }, }; diff --git a/src/db/db_tokens.h b/src/db/db_tokens.h index 4332676a..2e10ab81 100644 --- a/src/db/db_tokens.h +++ b/src/db/db_tokens.h @@ -15,5 +15,5 @@ typedef struct { const function_parameters_t *functions; } token_parameter_t; -#define NB_OF_TOKENS (14) +#define NB_OF_TOKENS (22) extern const token_parameter_t token_parameters[NB_OF_TOKENS]; diff --git a/src/swap/handle_get_printable_amount.c b/src/swap/handle_get_printable_amount.c index 928f44fe..1b398bbb 100644 --- a/src/swap/handle_get_printable_amount.c +++ b/src/swap/handle_get_printable_amount.c @@ -5,6 +5,7 @@ #include "os.h" #include "tokens.h" #include "format_u128.h" +#include "aleo_swap_utils.h" #include #include diff --git a/src/swap/handle_swap_sign_transaction.c b/src/swap/handle_swap_sign_transaction.c index 644363e9..c26d13e9 100644 --- a/src/swap/handle_swap_sign_transaction.c +++ b/src/swap/handle_swap_sign_transaction.c @@ -8,6 +8,7 @@ #include "tx_types.h" #include "handle_swap.h" #include "tokens.h" +#include "aleo_swap_utils.h" #include diff --git a/src/transaction/tx_parse.c b/src/transaction/tx_parse.c index 4793574c..ae7e9d83 100644 --- a/src/transaction/tx_parse.c +++ b/src/transaction/tx_parse.c @@ -31,12 +31,14 @@ #include "tx_types.h" #include "tx.h" -#define U64_TYPE_LENGTH (3) -#define U64_VALUE_LENGTH (8) -#define U128_TYPE_LENGTH (3) -#define U128_VALUE_LENGTH (2 * U64_VALUE_LENGTH) -#define ADDRESS_TYPE_LENGTH (3) -#define ADDRESS_VALUE_LENGTH sizeof(field_t) +#define U64_TYPE_LENGTH (3) +#define U64_VALUE_LENGTH (8) +#define U128_TYPE_LENGTH (3) +#define U128_VALUE_LENGTH (2 * U64_VALUE_LENGTH) +#define ADDRESS_TYPE_LENGTH (3) +#define ADDRESS_VALUE_LENGTH sizeof(field_t) +#define IDENTIFIER_TYPE_LENGTH (3) +#define IDENTIFIER_VALUE_LENGTH PLAINTEXT_TYPE_LITERAL_IDENTIFER_VALUE_LENGTH static const token_display_info_t aleo_display_info = {.type = TOKEN_TYPE_ALEO, .ticker = "ALEO", .decimals = 6}; @@ -44,6 +46,9 @@ static const token_display_info_t aleo_display_info static int get_u64(input_t *input, bool is_private, uint64_t *value); static int get_u128(input_t *input, bool is_private, u128_t *value); static int get_address(input_t *input, bool is_private, char address[ADDRESS_LEN + 1]); +static int get_identifier(input_t *input, + bool is_private, + char identifier[IDENTIFIER_VALUE_LENGTH + 1]); static int parse_aleo_transfer_public(sign_transaction_datas_t *data, tx_t *tx); static int parse_aleo_transfer_public_to_private(sign_transaction_datas_t *data, tx_t *tx); @@ -61,6 +66,10 @@ static int parse_token_transfer_private_to_public(sign_transaction_datas_t *data static int parse_token_batch_transfer_private(sign_transaction_datas_t *data, tx_t *tx); static int parse_token_batch_transfer_private_to_public(sign_transaction_datas_t *data, tx_t *tx); +static int parse_token_arc20_batch_transfer_private(sign_transaction_datas_t *data, tx_t *tx); +static int parse_token_arc20_batch_transfer_private_to_public(sign_transaction_datas_t *data, + tx_t *tx); + static int parse_fee_public(sign_transaction_datas_t *data, tx_t *tx); static int parse_fee_private(sign_transaction_datas_t *data, tx_t *tx); @@ -150,6 +159,31 @@ static int get_address(input_t *input, bool is_private, char address[ADDRESS_LEN return status; } +static int get_identifier(input_t *input, + bool is_private, + char identifier[IDENTIFIER_VALUE_LENGTH + 1]) +{ + if ((input->type_length != IDENTIFIER_TYPE_LENGTH) + || (input->value_length != IDENTIFIER_VALUE_LENGTH)) { + return -1; + } + else if (is_private && (input->type[0] != INPUT_ID_PRIVATE)) { + return -1; + } + else if (!is_private && (input->type[0] != INPUT_ID_PUBLIC)) { + return -1; + } + else if ((input->type[1] != INPUT_VALUE_TYPE_PLAINTEXT_LITERAL) + || (input->type[2] != PLAINTEXT_TYPE_LITERAL_IDENTIFIER)) { + return -1; + } + + memset(identifier, 0, IDENTIFIER_VALUE_LENGTH + 1); + memcpy(identifier, input->value, input->value_length); + + return strlen(identifier); +} + static int parse_aleo_transfer_public(sign_transaction_datas_t *data, tx_t *tx) { int status = get_address(&data->prepared_request.inputs[0], false, tx->transfer.address_to); @@ -235,7 +269,8 @@ static int parse_token_transfer_public(sign_transaction_datas_t *data, tx_t *tx) return status; } - if (tx->transfer.token_info->type == TOKEN_TYPE_ARC22) { + if ((tx->transfer.token_info->type == TOKEN_TYPE_ARC22) + || (tx->transfer.token_info->type == TOKEN_TYPE_ARC20)) { status = get_address(&data->prepared_request.inputs[0], false, tx->transfer.address_to); if (status == 0) { status = get_u128(&data->prepared_request.inputs[1], false, &tx->transfer.amount); @@ -258,7 +293,8 @@ static int parse_token_transfer_public_to_private(sign_transaction_datas_t *data return status; } - if (tx->transfer.token_info->type == TOKEN_TYPE_ARC22) { + if ((tx->transfer.token_info->type == TOKEN_TYPE_ARC22) + || (tx->transfer.token_info->type == TOKEN_TYPE_ARC20)) { status = get_address(&data->prepared_request.inputs[0], true, tx->transfer.address_to); if (status == 0) { status = get_u128(&data->prepared_request.inputs[1], false, &tx->transfer.amount); @@ -286,6 +322,12 @@ static int parse_token_transfer_private(sign_transaction_datas_t *data, tx_t *tx status = get_u128(&data->prepared_request.inputs[1], true, &tx->transfer.amount); } } + else if (tx->transfer.token_info->type == TOKEN_TYPE_ARC20) { + status = get_address(&data->prepared_request.inputs[1], true, tx->transfer.address_to); + if (status == 0) { + status = get_u128(&data->prepared_request.inputs[2], true, &tx->transfer.amount); + } + } else { return -1; } @@ -309,6 +351,12 @@ static int parse_token_transfer_private_to_public(sign_transaction_datas_t *data status = get_u128(&data->prepared_request.inputs[1], false, &tx->transfer.amount); } } + else if (tx->transfer.token_info->type == TOKEN_TYPE_ARC20) { + status = get_address(&data->prepared_request.inputs[1], true, tx->transfer.address_to); + if (status == 0) { + status = get_u128(&data->prepared_request.inputs[2], true, &tx->transfer.amount); + } + } else { return -1; } @@ -366,6 +414,85 @@ static int parse_token_batch_transfer_private_to_public(sign_transaction_datas_t return status; } +static int parse_token_arc20_batch_transfer_private(sign_transaction_datas_t *data, tx_t *tx) +{ + uint8_t inputs_count = data->prepared_request.inputs_count; + char program_id[PROGRAM_ID_NAME_MAX_LEN + 1]; + + LEDGER_ASSERT(PROGRAM_ID_NAME_MAX_LEN > (IDENTIFIER_VALUE_LENGTH + 6), "Buffer too small"); + + // Get the dynamic ARC20 program from the identifier + memset(program_id, 0, sizeof(program_id)); + int status = get_identifier(&data->prepared_request.inputs[0], true, program_id); + if (status < 0) { + return status; + } + if (status > (PROGRAM_ID_NAME_MAX_LEN - 5)) { + return -1; + } + memcpy(&program_id[status], ".aleo", 5); + + status + = db_get_token_display_info(program_id, strlen(program_id), NULL, &tx->transfer.token_info); + if (status < 0) { + return status; + } + + if (tx->transfer.token_info->type == TOKEN_TYPE_ARC20) { + status = get_address( + &data->prepared_request.inputs[inputs_count - 2], true, tx->transfer.address_to); + if (status == 0) { + status = get_u128( + &data->prepared_request.inputs[inputs_count - 1], true, &tx->transfer.amount); + } + } + else { + return -1; + } + + return status; +} + +static int parse_token_arc20_batch_transfer_private_to_public(sign_transaction_datas_t *data, + tx_t *tx) +{ + uint8_t inputs_count = data->prepared_request.inputs_count; + char program_id[PROGRAM_ID_NAME_MAX_LEN + 1]; + + LEDGER_ASSERT(PROGRAM_ID_NAME_MAX_LEN > (IDENTIFIER_VALUE_LENGTH + 6), "Buffer too small"); + + // Get the dynamic ARC20 program from the identifier + memset(program_id, 0, sizeof(program_id)); + int status = get_identifier(&data->prepared_request.inputs[0], true, program_id); + if (status < 0) { + return status; + } + if (status > (PROGRAM_ID_NAME_MAX_LEN - 5)) { + return -1; + } + memcpy(&program_id[status], ".aleo", 5); + + status + = db_get_token_display_info(program_id, strlen(program_id), NULL, &tx->transfer.token_info); + if (status < 0) { + return status; + } + + if (tx->transfer.token_info->type == TOKEN_TYPE_ARC20) { + status = get_address( + &data->prepared_request.inputs[inputs_count - 2], false, tx->transfer.address_to); + if (status == 0) { + status = get_u128( + &data->prepared_request.inputs[inputs_count - 1], false, &tx->transfer.amount); + } + } + else { + return -1; + } + + return status; +} + static int parse_fee_public(sign_transaction_datas_t *data, tx_t *tx) { int status = get_u64(&data->prepared_request.inputs[0], false, &tx->fee.base_fee); @@ -416,6 +543,16 @@ int tx_parse(sign_transaction_datas_t *data, tx_t *tx) return -1; } + if (data->prepared_request.network_id >= NETWORK_ID_COUNT) { + return -1; + } + + if (!memcmp(&FIELD_ZERO, + PIC(&function_parameters->bhp_1024_hashes[data->prepared_request.network_id]), + sizeof(field_t))) { + return -1; + } + tx->type = function_parameters->tx_type; switch (tx->type) { @@ -463,6 +600,12 @@ int tx_parse(sign_transaction_datas_t *data, tx_t *tx) case TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC: return parse_token_batch_transfer_private_to_public(data, tx); + case TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE: + return parse_token_arc20_batch_transfer_private(data, tx); + + case TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC: + return parse_token_arc20_batch_transfer_private_to_public(data, tx); + case TX_FEE_PUBLIC: G_context.r_list.count = 0; return parse_fee_public(data, tx); diff --git a/src/transaction/tx_types.h b/src/transaction/tx_types.h index b584e728..6231127b 100644 --- a/src/transaction/tx_types.h +++ b/src/transaction/tx_types.h @@ -11,6 +11,7 @@ typedef enum { INPUT_ID_RECORD = 3, INPUT_ID_EXTERNAL_RECORD = 4, INPUT_ID_FUTURE = 5, + INPUT_ID_DYNAMIC_RECORD = 6, } input_id_e; typedef enum { @@ -20,8 +21,11 @@ typedef enum { } input_value_type_e; typedef enum { - PLAINTEXT_TYPE_LITERAL_ADDRESS = 0, - PLAINTEXT_TYPE_LITERAL_FIELD = 2, - PLAINTEXT_TYPE_LITERAL_U64 = 12, - PLAINTEXT_TYPE_LITERAL_U128 = 13, -} plaintext_type_literal_e; \ No newline at end of file + PLAINTEXT_TYPE_LITERAL_ADDRESS = 0, + PLAINTEXT_TYPE_LITERAL_FIELD = 2, + PLAINTEXT_TYPE_LITERAL_U64 = 12, + PLAINTEXT_TYPE_LITERAL_U128 = 13, + PLAINTEXT_TYPE_LITERAL_IDENTIFIER = 17, +} plaintext_type_literal_e; + +#define PLAINTEXT_TYPE_LITERAL_IDENTIFER_VALUE_LENGTH (31) diff --git a/src/types.h b/src/types.h index 2c1369a0..8cc767a7 100644 --- a/src/types.h +++ b/src/types.h @@ -135,7 +135,9 @@ typedef enum { TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC, TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, - TX_TRANSFER_END = TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE, + TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE, + TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, + TX_TRANSFER_END = TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC, TX_FEE_START, TX_FEE_PUBLIC = TX_FEE_START, diff --git a/src/ui/nbgl_display_transaction.c b/src/ui/nbgl_display_transaction.c index 217268ea..562859d6 100644 --- a/src/ui/nbgl_display_transaction.c +++ b/src/ui/nbgl_display_transaction.c @@ -35,6 +35,7 @@ #include "types.h" #include "menu.h" #include "tokens.h" +#include "handle_swap.h" // Buffer where the transaction amount string is written static char g_amount[MAX_AMOUNT_SIZE + 1 + MAX_TICKER_SIZE]; @@ -105,7 +106,8 @@ int ui_display_transaction(void) review_subtitle = "Private transfer"; } else if ((G_context.tx.type == TX_ALEO_TRANSFER_BATCH_PRIVATE) - || (G_context.tx.type == TX_TOKEN_TRANSFER_BATCH_PRIVATE)) { + || (G_context.tx.type == TX_TOKEN_TRANSFER_BATCH_PRIVATE) + || (G_context.tx.type == TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE)) { review_subtitle = "Private batch transfer"; } else if ((G_context.tx.type == TX_ALEO_TRANSFER_PRIVATE_TO_PUBLIC) @@ -113,7 +115,8 @@ int ui_display_transaction(void) review_subtitle = "Transfer from private to public address"; } else if ((G_context.tx.type == TX_ALEO_TRANSFER_BATCH_PRIVATE_TO_PUBLIC) - || (G_context.tx.type == TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC)) { + || (G_context.tx.type == TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC) + || (G_context.tx.type == TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC)) { review_subtitle = "Batch transfer from private to public address"; } else if ((G_context.tx.type == TX_ALEO_TRANSFER_PUBLIC_TO_PRIVATE) diff --git a/tests/application_client/transaction.py b/tests/application_client/transaction.py index d29bd25a..9b1176f4 100644 --- a/tests/application_client/transaction.py +++ b/tests/application_client/transaction.py @@ -48,6 +48,7 @@ class TlvTypes(Enum): "scalar": "0e", "signature": "0f", "string": "10", + "identifier": "11", } @staticmethod @@ -143,6 +144,8 @@ def get_input_type_from_string(input_type: str) -> str: ) elif sp_input_type[-1] == "external_record": val += "04" + elif sp_input_type[-1] == "dyn_external_record": + val += "06" elif sp_input_type[-1] == "merkle_proof": val += "020100" @@ -169,7 +172,10 @@ def generate_input(inputs: dict): value = int(input_item["value"].split("field")[0]) big = BigInteger256(int(value)) input_val += big.to_int().to_bytes(32, "little").hex() - elif "external_record" in input_item["type"]: + elif ( + "dyn_external_record" in input_item["type"] + or "external_record" in input_item["type"] + ): input_val = input_item["value"] elif "record" in input_item["type"]: for in_val in input_item["value"]: @@ -185,6 +191,10 @@ def generate_input(inputs: dict): value = int(in_val.split("field")[0]) big = BigInteger256(int(value)) input_val += big.to_int().to_bytes(32, "little").hex() + elif "identifier" in input_item["type"]: + id_len = len(input_item["value"]) + input_val = bytes(input_item["value"], "utf-8").hex() + input_val += "00" * (31 - id_len) else: input_val += input_item["value"] val += Transaction.forge_tlv(Transaction.TlvTypes.INPUT_VALUES, input_val) diff --git a/tests/standalone/snapshots/apex_p/test_app_mainmenu/00001.png b/tests/standalone/snapshots/apex_p/test_app_mainmenu/00001.png index 7e686b7e..1cd43c00 100644 Binary files a/tests/standalone/snapshots/apex_p/test_app_mainmenu/00001.png and b/tests/standalone/snapshots/apex_p/test_app_mainmenu/00001.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00000.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00000.png new file mode 100644 index 00000000..efd6096a Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00000.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00001.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00001.png new file mode 100644 index 00000000..30f1ba60 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00001.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00002.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00002.png new file mode 100644 index 00000000..927b525b Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_batch_private/00002.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00000.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00000.png new file mode 100644 index 00000000..c7c4a2f6 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00000.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00001.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00001.png new file mode 100644 index 00000000..30f1ba60 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00001.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00002.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00002.png new file mode 100644 index 00000000..927b525b Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private/00002.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png new file mode 100644 index 00000000..bfc515a2 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png new file mode 100644 index 00000000..30f1ba60 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png new file mode 100644 index 00000000..927b525b Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00000.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00000.png new file mode 100644 index 00000000..92dd4bc8 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00000.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00001.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00001.png new file mode 100644 index 00000000..30f1ba60 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00001.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00002.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00002.png new file mode 100644 index 00000000..927b525b Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public/00002.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png new file mode 100644 index 00000000..56c5b86c Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png new file mode 100644 index 00000000..30f1ba60 Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png differ diff --git a/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png new file mode 100644 index 00000000..927b525b Binary files /dev/null and b/tests/standalone/snapshots/apex_p/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png differ diff --git a/tests/standalone/snapshots/flex/test_app_mainmenu/00001.png b/tests/standalone/snapshots/flex/test_app_mainmenu/00001.png index 7b277866..5a9a71c5 100644 Binary files a/tests/standalone/snapshots/flex/test_app_mainmenu/00001.png and b/tests/standalone/snapshots/flex/test_app_mainmenu/00001.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00000.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00000.png new file mode 100644 index 00000000..14130584 Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00000.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00001.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00001.png new file mode 100644 index 00000000..2d30ce2b Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00001.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00002.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00002.png new file mode 100644 index 00000000..893a6e1c Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_batch_private/00002.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00000.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00000.png new file mode 100644 index 00000000..34ef3616 Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00000.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00001.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00001.png new file mode 100644 index 00000000..2d30ce2b Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00001.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00002.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00002.png new file mode 100644 index 00000000..893a6e1c Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private/00002.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png new file mode 100644 index 00000000..d8e9aef8 Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png new file mode 100644 index 00000000..2d30ce2b Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png new file mode 100644 index 00000000..893a6e1c Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00000.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00000.png new file mode 100644 index 00000000..c1d05825 Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00000.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00001.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00001.png new file mode 100644 index 00000000..2d30ce2b Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00001.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00002.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00002.png new file mode 100644 index 00000000..893a6e1c Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public/00002.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png new file mode 100644 index 00000000..3660d5b0 Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png new file mode 100644 index 00000000..2d30ce2b Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png differ diff --git a/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png new file mode 100644 index 00000000..893a6e1c Binary files /dev/null and b/tests/standalone/snapshots/flex/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png differ diff --git a/tests/standalone/snapshots/nanosp/test_app_mainmenu/00002.png b/tests/standalone/snapshots/nanosp/test_app_mainmenu/00002.png index 5b4ad03c..8c1919fa 100644 Binary files a/tests/standalone/snapshots/nanosp/test_app_mainmenu/00002.png and b/tests/standalone/snapshots/nanosp/test_app_mainmenu/00002.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00000.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00000.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00001.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00001.png new file mode 100644 index 00000000..adbc6a90 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00001.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00002.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00002.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00003.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00003.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00004.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00004.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00005.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00005.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00006.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_batch_private/00006.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00000.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00000.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00001.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00001.png new file mode 100644 index 00000000..31c65f3a Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00001.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00002.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00002.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00003.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00003.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00004.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00004.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00005.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00005.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00006.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private/00006.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png new file mode 100644 index 00000000..8207c0f8 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00003.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00003.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00004.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00004.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00005.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00005.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00006.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_private_to_public/00006.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00000.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00000.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00001.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00001.png new file mode 100644 index 00000000..d3a07270 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00001.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00002.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00002.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00003.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00003.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00004.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00004.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00005.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00005.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00006.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public/00006.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png new file mode 100644 index 00000000..3eb286f2 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00003.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00003.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00004.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00004.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00005.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00005.png differ diff --git a/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00006.png b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanosp/test_sign_transaction_token_arc20_transfer_public_to_private/00006.png differ diff --git a/tests/standalone/snapshots/nanox/test_app_mainmenu/00002.png b/tests/standalone/snapshots/nanox/test_app_mainmenu/00002.png index 5b4ad03c..8c1919fa 100644 Binary files a/tests/standalone/snapshots/nanox/test_app_mainmenu/00002.png and b/tests/standalone/snapshots/nanox/test_app_mainmenu/00002.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00000.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00000.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00001.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00001.png new file mode 100644 index 00000000..adbc6a90 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00001.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00002.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00002.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00003.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00003.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00004.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00004.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00005.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00005.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00006.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_batch_private/00006.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00000.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00000.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00001.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00001.png new file mode 100644 index 00000000..31c65f3a Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00001.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00002.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00002.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00003.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00003.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00004.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00004.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00005.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00005.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00006.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private/00006.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png new file mode 100644 index 00000000..8207c0f8 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00003.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00003.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00004.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00004.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00005.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00005.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00006.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_private_to_public/00006.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00000.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00000.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00001.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00001.png new file mode 100644 index 00000000..d3a07270 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00001.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00002.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00002.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00003.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00003.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00004.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00004.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00005.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00005.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00006.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public/00006.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png new file mode 100644 index 00000000..0c390aae Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png new file mode 100644 index 00000000..3eb286f2 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png new file mode 100644 index 00000000..8d95ea75 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00003.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00003.png new file mode 100644 index 00000000..221f7cc0 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00003.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00004.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00004.png new file mode 100644 index 00000000..0bf22da4 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00004.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00005.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00005.png new file mode 100644 index 00000000..1b8dc600 Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00005.png differ diff --git a/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00006.png b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00006.png new file mode 100644 index 00000000..c1d53a3b Binary files /dev/null and b/tests/standalone/snapshots/nanox/test_sign_transaction_token_arc20_transfer_public_to_private/00006.png differ diff --git a/tests/standalone/snapshots/stax/test_app_mainmenu/00001.png b/tests/standalone/snapshots/stax/test_app_mainmenu/00001.png index ad33f1ca..04babbae 100644 Binary files a/tests/standalone/snapshots/stax/test_app_mainmenu/00001.png and b/tests/standalone/snapshots/stax/test_app_mainmenu/00001.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00000.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00000.png new file mode 100644 index 00000000..34ffc147 Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00000.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00001.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00001.png new file mode 100644 index 00000000..3526f89d Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00001.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00002.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00002.png new file mode 100644 index 00000000..208afd4c Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_batch_private/00002.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00000.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00000.png new file mode 100644 index 00000000..412938b1 Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00000.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00001.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00001.png new file mode 100644 index 00000000..3526f89d Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00001.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00002.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00002.png new file mode 100644 index 00000000..208afd4c Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private/00002.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png new file mode 100644 index 00000000..7aeda6a5 Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00000.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png new file mode 100644 index 00000000..3526f89d Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00001.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png new file mode 100644 index 00000000..208afd4c Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_private_to_public/00002.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00000.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00000.png new file mode 100644 index 00000000..61c7cf8c Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00000.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00001.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00001.png new file mode 100644 index 00000000..3526f89d Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00001.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00002.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00002.png new file mode 100644 index 00000000..208afd4c Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public/00002.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png new file mode 100644 index 00000000..63496a2f Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00000.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png new file mode 100644 index 00000000..3526f89d Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00001.png differ diff --git a/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png new file mode 100644 index 00000000..208afd4c Binary files /dev/null and b/tests/standalone/snapshots/stax/test_sign_transaction_token_arc20_transfer_public_to_private/00002.png differ diff --git a/tests/standalone/test_sign_transaction.py b/tests/standalone/test_sign_transaction.py index 61b2109e..ecf3967b 100644 --- a/tests/standalone/test_sign_transaction.py +++ b/tests/standalone/test_sign_transaction.py @@ -357,6 +357,194 @@ def forge_nested_call_arc22_token_private_transfer( return data +def forge_arc20_token_public_transfer( + max_base_fee: int, + max_priority_fee: int, + address_to: str, + amount: int, + program_name: str, + program_checksum: str = "", +) -> dict: + + data = { + "type": "intent", + "max_base_fee": max_base_fee, + "max_priority_fee": max_priority_fee, + "fee_program_id": "credits.aleo", + "fee_function_name": "fee_public", + } + data["request"] = { + "network_id": "mainnet", + "program_id": program_name, + "function_name": "transfer_public", + } + data["request"]["inputs"] = [ + {"type": "address.public", "value": address_to}, + {"type": "u128.public", "value": amount}, + ] + data["request"]["nested_call_count"] = 0 + data["request"]["program_checksum"] = program_checksum + + return data + + +def forge_arc20_token_public_to_private_transfer( + max_base_fee: int, + max_priority_fee: int, + address_to: str, + amount: int, + program_name: str, + program_checksum: str = "", +) -> dict: + + data = { + "type": "intent", + "max_base_fee": max_base_fee, + "max_priority_fee": max_priority_fee, + "fee_program_id": "credits.aleo", + "fee_function_name": "fee_public", + } + data["request"] = { + "network_id": "mainnet", + "program_id": program_name, + "function_name": "transfer_public_to_private", + } + data["request"]["inputs"] = [ + {"type": "address.private", "value": address_to}, + {"type": "u128.public", "value": amount}, + ] + data["request"]["nested_call_count"] = 0 + data["request"]["program_checksum"] = program_checksum + + return data + + +def forge_arc20_token_private_transfer( + max_base_fee: int, + max_priority_fee: int, + record: list[str], + address_to: str, + amount: int, + program_name: str, + program_checksum: str = "", +) -> dict: + + data = { + "type": "intent", + "max_base_fee": max_base_fee, + "max_priority_fee": max_priority_fee, + "fee_program_id": "credits.aleo", + "fee_function_name": "fee_private", + } + data["request"] = { + "network_id": "mainnet", + "program_id": program_name, + "function_name": "transfer_private", + } + # Unlike ARC22 tokens, ARC20 tokens read the address/amount from indexes 1 + # and 2 (index 0 is the input token record, which is not parsed/displayed). + data["request"]["inputs"] = [ + {"type": "token.record", "value": record}, + {"type": "address.private", "value": address_to}, + {"type": "u128.private", "value": amount}, + ] + data["request"]["nested_call_count"] = 0 + data["request"]["program_checksum"] = program_checksum + + return data + + +def forge_arc20_token_private_to_public_transfer( + max_base_fee: int, + max_priority_fee: int, + record: list[str], + address_to: str, + amount: int, + program_name: str, + program_checksum: str = "", +) -> dict: + + data = { + "type": "intent", + "max_base_fee": max_base_fee, + "max_priority_fee": max_priority_fee, + "fee_program_id": "credits.aleo", + "fee_function_name": "fee_private", + } + data["request"] = { + "network_id": "mainnet", + "program_id": program_name, + "function_name": "transfer_private_to_public", + } + data["request"]["inputs"] = [ + {"type": "token.record", "value": record}, + {"type": "address.private", "value": address_to}, + {"type": "u128.private", "value": amount}, + ] + data["request"]["nested_call_count"] = 0 + data["request"]["program_checksum"] = program_checksum + + return data + + +def forge_arc20_token_batch_private_transfer( + max_base_fee: int, + max_priority_fee: int, + dyn_external_record: list[str], + address_to: str, + amount: int, + identifier: str, + program_checksum: str = "", +) -> dict: + data = { + "type": "intent", + "max_base_fee": max_base_fee, + "max_priority_fee": max_priority_fee, + "fee_program_id": "credits.aleo", + "fee_function_name": "fee_private", + } + data["request"] = { + "network_id": "mainnet", + "program_id": "ldg_arc20_p_213.aleo", + "function_name": "transfer_private_2", + } + data["request"]["inputs"] = [ + {"type": "identifier.private", "value": identifier}, + {"type": "dyn_external_record", "value": dyn_external_record[0]}, + {"type": "dyn_external_record", "value": dyn_external_record[1]}, + {"type": "address.private", "value": address_to}, + {"type": "u128.private", "value": amount}, + ] + data["request"]["nested_call_count"] = 2 + data["request"]["program_checksum"] = program_checksum + + return data + + +def forge_nested_call_arc20_token_private_transfer( + record: list[str], + address_to: str, + amount: int, + program_name: str, + program_checksum: str = "", +) -> dict: + data = {"type": "nested_call"} + data["request"] = { + "network_id": "mainnet", + "program_id": program_name, + "function_name": "transfer_private", + } + data["request"]["inputs"] = [ + {"type": "token.record", "value": record}, + {"type": "address.private", "value": address_to}, + {"type": "u128.private", "value": amount}, + ] + data["request"]["nested_call_count"] = 0 + data["request"]["program_checksum"] = program_checksum + + return data + + def forge_public_fee( base_fee: int, priority_fee: int, execution_id: str, program_checksum: str = "" ) -> dict: @@ -2004,6 +2192,20 @@ def test_sign_transaction_fees_in_nested_call( "7266375125414209082394925781071362722506946030314916664133746682226945366259field", ) tx_datas['type'] = 'nested_call' + +def test_sign_transaction_token_arc20_unknown( + backend: BackendInterface, scenario_navigator: NavigateWithScenario +) -> None: + client = CommandSender(backend) + tx_datas = forge_arc20_token_public_transfer( + 500, + 100, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "dummy_arc20_token.aleo", + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with pytest.raises(ExceptionRAPDU) as e: with client.sign_transaction(tx_datas=tx_datas): if scenario_navigator.device.is_nano: @@ -2013,7 +2215,485 @@ def test_sign_transaction_fees_in_nested_call( scenario_navigator.navigator.navigate_until_text( navigate_instruction=instruction, validation_instructions=None, - text="Transaction signed", + text="Transaction rejected", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + + assert e.value.status == StatusWords.SWO_INCORRECT_DATA + + +def test_sign_transaction_token_arc20_transfer_public( + backend: BackendInterface, scenario_navigator: NavigateWithScenario +) -> None: + client = CommandSender(backend) + tx_datas = forge_arc20_token_public_transfer( + 500, + 100, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "arc20_usdt.aleo", + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with client.sign_transaction(tx_datas=tx_datas): + scenario_navigator.review_approve_with_spinner("Calculating fees") + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 0, + } + assert check_response(unpacked, expected) + + tx_datas = forge_public_fee( + 500, + 100, + "7266375125414209082394925781071362722506946030314916664133746682226945366259field", + ) + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Transaction signed", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 0, + } + assert check_response(unpacked, expected) + + +def test_sign_transaction_token_arc20_transfer_private( + backend: BackendInterface, scenario_navigator: NavigateWithScenario +) -> None: + client = CommandSender(backend) + record = [ + "3614797564276936744957924747041031196891698846785520060979425601577054464500field", + "2426895214035216932245297778850989035038538961658726507442215877484415082794field", + "0220642863446832956019507279394572297489712696240584424406852292692897199577field", + ] + + tx_datas = forge_arc20_token_private_transfer( + 500, + 100, + record, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "arc20_usdt.aleo", + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with client.sign_transaction(tx_datas=tx_datas): + scenario_navigator.review_approve_with_spinner("Calculating fees") + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 1, + "gammas": ["b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003"], + } + assert check_response(unpacked, expected) + + tx_datas = forge_private_fee( + 500, + 100, + record, + "7266375125414209082394925781071362722506946030314916664133746682226945366259field", + ) + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Transaction signed", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 1, + "gammas": ["b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003"], + } + assert check_response(unpacked, expected) + + +def test_sign_transaction_token_arc20_transfer_private_to_public( + backend: BackendInterface, scenario_navigator: NavigateWithScenario +) -> None: + client = CommandSender(backend) + record = [ + "3614797564276936744957924747041031196891698846785520060979425601577054464500field", + "2426895214035216932245297778850989035038538961658726507442215877484415082794field", + "0220642863446832956019507279394572297489712696240584424406852292692897199577field", + ] + + tx_datas = forge_arc20_token_private_to_public_transfer( + 500, + 100, + record, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "arc20_usdt.aleo", + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with client.sign_transaction(tx_datas=tx_datas): + scenario_navigator.review_approve_with_spinner("Calculating fees") + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 1, + "gammas": ["b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003"], + } + assert check_response(unpacked, expected) + + tx_datas = forge_private_fee( + 500, + 100, + record, + "7266375125414209082394925781071362722506946030314916664133746682226945366259field", + ) + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Transaction signed", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 1, + "gammas": ["b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003"], + } + assert check_response(unpacked, expected) + + +def test_sign_transaction_token_arc20_transfer_public_to_private( + backend: BackendInterface, scenario_navigator: NavigateWithScenario +) -> None: + client = CommandSender(backend) + tx_datas = forge_arc20_token_public_to_private_transfer( + 500, + 100, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "arc20_usdt.aleo", + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with client.sign_transaction(tx_datas=tx_datas): + scenario_navigator.review_approve_with_spinner("Calculating fees") + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 0, + } + assert check_response(unpacked, expected) + + tx_datas = forge_public_fee( + 500, + 100, + "7266375125414209082394925781071362722506946030314916664133746682226945366259field", + ) + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Transaction signed", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 0, + } + assert check_response(unpacked, expected) + + +def test_sign_transaction_token_arc20_transfer_batch_private( + backend: BackendInterface, scenario_navigator: NavigateWithScenario +) -> None: + client = CommandSender(backend) + + tx_datas = {"type": "get_tvk", "path": "m/44'/683'/0'/0'", "index": 0} + response = client.get_tvk(tx_datas=tx_datas).data + unpacked = unpack_get_tvk_response(response) + tvk_0 = unpacked["tvk"] + tx_datas = {"type": "get_tvk", "path": "m/44'/683'/0'/0'", "index": 1} + response = client.get_tvk(tx_datas=tx_datas).data + unpacked = unpack_get_tvk_response(response) + tvk_1 = unpacked["tvk"] + tx_datas = {"type": "get_tvk", "path": "m/44'/683'/0'/0'", "index": 2} + response = client.get_tvk(tx_datas=tx_datas).data + unpacked = unpack_get_tvk_response(response) + tvk_2 = unpacked["tvk"] + + external_record = [ + "d5f4b9312020d52c6752cb927e00771b300e8742e7cbe2cffe79a2a9f1641e03f1020000b6a58dc9bd8dc99591a5d1cd0503100019000000000000806381fe03232753113751635f57729543c73e2ab3641901f57fec18b1e560b28b80000000", + "d5f4b9312020d52c6752cb927e00771b300e8742e7cbe2cffe79a2a9f1641e03f1020000b6a58dc9bd8dc99591a5d1cd0503100019000000000000c0eed4b40239bab0f49f52a8a88613dc6ea6aec32d2d23df9a005edf7d940ecfb980000000", + ] + + tx_datas = forge_arc20_token_batch_private_transfer( + 500, + 100, + external_record, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "arc20_usdt", + "e9fb1007c069e11dda4a4c3f6e1d5a8c6fcbfb0a1f556ff629719f095902e107", + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with client.sign_transaction(tx_datas=tx_datas): + scenario_navigator.review_approve_with_spinner("Prepare Tx 5/15") + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "tvk": tvk_0, + "gammas_count": 0, + } + assert check_response(unpacked, expected) + + record = [ + "3614797564276936744957924747041031196891698846785520060979425601577054464500field", + "2426895214035216932245297778850989035038538961658726507442215877484415082794field", + "0220642863446832956019507279394572297489712696240584424406852292692897199577field", + ] + tx_datas = forge_nested_call_join( + record, + record, + "arc20_usdt.aleo", + "e9fb1007c069e11dda4a4c3f6e1d5a8c6fcbfb0a1f556ff629719f095902e107", + ) + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Prepare Tx 10/15", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "tvk": tvk_1, + "gammas_count": 2, + "gammas": [ + "b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003", + "b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003", + ], + } + assert check_response(unpacked, expected) + + tx_datas = forge_nested_call_arc20_token_private_transfer( + record, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "arc20_usdt.aleo", + "e9fb1007c069e11dda4a4c3f6e1d5a8c6fcbfb0a1f556ff629719f095902e107", + ) + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Calculating fees", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "tvk": tvk_2, + "gammas_count": 1, + "gammas": ["b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003"], + } + assert check_response(unpacked, expected) + + tx_datas = forge_private_fee( + 500, + 100, + record, + "7266375125414209082394925781071362722506946030314916664133746682226945366259field", + ) + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Transaction signed", + timeout=3, + screen_change_before_first_instruction=False, + screen_change_after_last_instruction=True, + ) + + response = client.get_async_response().data + unpacked = unpack_sign_transaction_response(response) + expected = { + "structure_type": 42, + "version": 1, + "signature": { + "pk_sig": "1d4c4b28dd6ce05ab520f00b71c081d480684c746a7d8f3b0a3a68d410ce840e", + "pr_sig": "3a8a3cfee21ce108285cca4cc50abb5ac9044acf26959ddb7722cbb968bdc310", + }, + "gammas_count": 1, + "gammas": ["b0bfc7d7c4fd471833c6d4dd6bd061b3a728a31594b75ef8e424a2de7f883003"], + } + assert check_response(unpacked, expected) + + +def test_sign_transaction_token_arc20_unknown_transfer_batch_private( + backend: BackendInterface, scenario_navigator: NavigateWithScenario +) -> None: + client = CommandSender(backend) + + tx_datas = {"type": "get_tvk", "path": "m/44'/683'/0'/0'", "index": 0} + response = client.get_tvk(tx_datas=tx_datas).data + unpacked = unpack_get_tvk_response(response) + tvk_0 = unpacked["tvk"] + tx_datas = {"type": "get_tvk", "path": "m/44'/683'/0'/0'", "index": 1} + response = client.get_tvk(tx_datas=tx_datas).data + unpacked = unpack_get_tvk_response(response) + tvk_1 = unpacked["tvk"] + tx_datas = {"type": "get_tvk", "path": "m/44'/683'/0'/0'", "index": 2} + response = client.get_tvk(tx_datas=tx_datas).data + unpacked = unpack_get_tvk_response(response) + tvk_2 = unpacked["tvk"] + + external_record = [ + "d5f4b9312020d52c6752cb927e00771b300e8742e7cbe2cffe79a2a9f1641e03f1020000b6a58dc9bd8dc99591a5d1cd0503100019000000000000806381fe03232753113751635f57729543c73e2ab3641901f57fec18b1e560b28b80000000", + "d5f4b9312020d52c6752cb927e00771b300e8742e7cbe2cffe79a2a9f1641e03f1020000b6a58dc9bd8dc99591a5d1cd0503100019000000000000c0eed4b40239bab0f49f52a8a88613dc6ea6aec32d2d23df9a005edf7d940ecfb980000000", + ] + + tx_datas = forge_arc20_token_batch_private_transfer( + 500, + 100, + external_record, + "aleo1sfydt6z6cnqjx3hcgk9ajw03ecj6uqlfcm9u3p3gdhckzcc2w5xqv3v3pe", + 1000, + "arc20_dummy", + "e9fb1007c069e11dda4a4c3f6e1d5a8c6fcbfb0a1f556ff629719f095902e107", + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + + with pytest.raises(ExceptionRAPDU) as e: + with client.sign_transaction(tx_datas=tx_datas): + if scenario_navigator.device.is_nano: + instruction = NavInsID.BOTH_CLICK + else: + instruction = NavInsID.USE_CASE_REVIEW_TAP + scenario_navigator.navigator.navigate_until_text( + navigate_instruction=instruction, + validation_instructions=None, + text="Transaction rejected", timeout=3, screen_change_before_first_instruction=False, screen_change_after_last_instruction=True, diff --git a/tests/swap/cal_helper.py b/tests/swap/cal_helper.py index dfd518fe..d53e7d82 100644 --- a/tests/swap/cal_helper.py +++ b/tests/swap/cal_helper.py @@ -40,3 +40,14 @@ conf=ALEO_FAKE_CONF, packed_derivation_path=ALEO_FAKE_PACKED_DERIVATION_PATH, ) + +# ALEO ARC20 USDC token configuration - USDC with 6 decimals +ALEO_ARC20_USDT_CONF = create_currency_config( + "USDT", "Aleo", sub_coin_config=("USDT", 6) +) +ALEO_ARC20_USDT_PACKED_DERIVATION_PATH = ALEO_PACKED_DERIVATION_PATH +ALEO_ARC20_USDT_CURRENCY_CONFIGURATION = CurrencyConfiguration( + ticker="USDT", + conf=ALEO_ARC20_USDT_CONF, + packed_derivation_path=ALEO_ARC20_USDT_PACKED_DERIVATION_PATH, +) diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..ac597b65 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..8ade48bc Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png new file mode 100644 index 00000000..d9b14d8e Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png new file mode 100644 index 00000000..38ff22cc Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png new file mode 100644 index 00000000..d1c7ed47 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..ac597b65 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..8ade48bc Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png new file mode 100644 index 00000000..92a98828 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png new file mode 100644 index 00000000..9857e1ec Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png new file mode 100644 index 00000000..93f61f2a Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..4aba0a2b Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..8ade48bc Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png new file mode 100644 index 00000000..1d815859 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png new file mode 100644 index 00000000..905d36d6 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png new file mode 100644 index 00000000..8d325116 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..4aba0a2b Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..8ade48bc Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..1d815859 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..4ac00765 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..8d325116 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..4aba0a2b Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..8ade48bc Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png new file mode 100644 index 00000000..92a98828 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png new file mode 100644 index 00000000..9857e1ec Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png new file mode 100644 index 00000000..93f61f2a Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..4aba0a2b Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..8ade48bc Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..92a98828 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..ea7c9f74 Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..93f61f2a Binary files /dev/null and b/tests/swap/snapshots/apex_p/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..603f9f94 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..261cb973 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png new file mode 100644 index 00000000..7d23fd7b Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png new file mode 100644 index 00000000..97f44a8a Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png new file mode 100644 index 00000000..63f5bce4 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..603f9f94 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..261cb973 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png new file mode 100644 index 00000000..3a078866 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png new file mode 100644 index 00000000..a3271667 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png new file mode 100644 index 00000000..24d93d6e Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..435aa78b Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..261cb973 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png new file mode 100644 index 00000000..87c5be1b Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png new file mode 100644 index 00000000..fd6491b3 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png new file mode 100644 index 00000000..67d7b5f9 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..435aa78b Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..261cb973 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..87c5be1b Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..2bc30f8a Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..67d7b5f9 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..435aa78b Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..261cb973 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png new file mode 100644 index 00000000..3a078866 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png new file mode 100644 index 00000000..a3271667 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png new file mode 100644 index 00000000..24d93d6e Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..435aa78b Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..261cb973 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..3a078866 Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..368e090f Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..24d93d6e Binary files /dev/null and b/tests/swap/snapshots/flex/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..e5ea8ae9 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png new file mode 100644 index 00000000..17735e47 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png new file mode 100644 index 00000000..c1964094 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..e5ea8ae9 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png new file mode 100644 index 00000000..aea8e3be Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f57ac9b6 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png new file mode 100644 index 00000000..f160be76 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png new file mode 100644 index 00000000..5bc5cdce Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..f160be76 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..5bc5cdce Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00004.png new file mode 100644 index 00000000..bfdf90c0 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png new file mode 100644 index 00000000..aea8e3be Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f57ac9b6 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..aea8e3be Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f57ac9b6 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00004.png new file mode 100644 index 00000000..bfdf90c0 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanosp/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..e5ea8ae9 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png new file mode 100644 index 00000000..17735e47 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png new file mode 100644 index 00000000..c1964094 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..e5ea8ae9 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png new file mode 100644 index 00000000..aea8e3be Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f57ac9b6 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png new file mode 100644 index 00000000..f160be76 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png new file mode 100644 index 00000000..5bc5cdce Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..f160be76 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..5bc5cdce Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00004.png new file mode 100644 index 00000000..bfdf90c0 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png new file mode 100644 index 00000000..aea8e3be Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f57ac9b6 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00004.png new file mode 100644 index 00000000..c24ada37 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..3a161194 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..95728b4e Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..aea8e3be Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..1a80bb27 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f57ac9b6 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00003.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00003.png new file mode 100644 index 00000000..2b847e35 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00003.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00004.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00004.png new file mode 100644 index 00000000..bfdf90c0 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00004.png differ diff --git a/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00005.png b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00005.png new file mode 100644 index 00000000..c2d3d181 Binary files /dev/null and b/tests/swap/snapshots/nanox/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00005.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..053e66f3 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..6c80008b Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png new file mode 100644 index 00000000..c3de342f Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png new file mode 100644 index 00000000..3239beec Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png new file mode 100644 index 00000000..38d27c8c Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_1_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..053e66f3 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..6c80008b Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png new file mode 100644 index 00000000..e91e391f Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png new file mode 100644 index 00000000..469d58df Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f13420a0 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_fake_2_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..ceda6a87 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..6c80008b Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png new file mode 100644 index 00000000..e627901d Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png new file mode 100644 index 00000000..28f4d516 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png new file mode 100644 index 00000000..e3d3269e Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..ceda6a87 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..6c80008b Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..e627901d Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..90120978 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..e3d3269e Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdc_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..ceda6a87 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..6c80008b Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png new file mode 100644 index 00000000..e91e391f Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png new file mode 100644 index 00000000..469d58df Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f13420a0 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_swap_valid_1/review/00002.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png new file mode 100644 index 00000000..ceda6a87 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png new file mode 100644 index 00000000..6c80008b Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/post_sign/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png new file mode 100644 index 00000000..e91e391f Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00000.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png new file mode 100644 index 00000000..c081c342 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00001.png differ diff --git a/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png new file mode 100644 index 00000000..f13420a0 Binary files /dev/null and b/tests/swap/snapshots/stax/test_aleo_swap_arc20_usdt_zero_fee_swap_valid_1/review/00002.png differ diff --git a/tests/swap/test_aleo.py b/tests/swap/test_aleo.py index a5ea1bfd..c6f66041 100644 --- a/tests/swap/test_aleo.py +++ b/tests/swap/test_aleo.py @@ -90,6 +90,37 @@ def forge_arc22_token_public_transfer( return data +def forge_arc20_token_public_transfer( + max_base_fee: int, + max_priority_fee: int, + address_to: str, + amount: int, + program_name: str, + program_checksum: str = "", +) -> dict: + + data = { + "type": "intent", + "max_base_fee": max_base_fee, + "max_priority_fee": max_priority_fee, + "fee_program_id": "credits.aleo", + "fee_function_name": "fee_public", + } + data["request"] = { + "network_id": "mainnet", + "program_id": program_name, + "function_name": "transfer_public", + } + data["request"]["inputs"] = [ + {"type": "address.public", "value": address_to}, + {"type": "u128.public", "value": amount}, + ] + data["request"]["nested_call_count"] = 0 + data["request"]["program_checksum"] = program_checksum + + return data + + class GenericAleoTests(ExchangeTestRunner): # The coin configuration of our currency. Replace by your own currency_configuration = cal.ALEO_CURRENCY_CONFIGURATION @@ -210,6 +241,63 @@ def perform_final_tx(self, destination, send_amount, fees, memo): rapdu = client.get_async_response() +class ARC20USDCTokenTests(GenericAleoTests): + currency_configuration = cal.ALEO_ARC20_USDT_CURRENCY_CONFIGURATION + + def perform_final_tx(self, destination, send_amount, fees, memo): + client = CommandSender(self.backend) + tx_datas = forge_arc20_token_public_transfer( + 0, fees, destination, send_amount, "arc20_usdt.aleo" + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with client.sign_transaction(tx_datas=tx_datas): + pass + rapdu = client.get_async_response() + + if fees != 0: + tx_datas = forge_public_fee( + 0, + fees, + "7266375125414209082394925781071362722506946030314916664133746682226945366259field", + ) + with client.sign_transaction(tx_datas=tx_datas): + pass + rapdu = client.get_async_response() + + +class ZeroFeeARC20USDCTokenTests(ARC20USDCTokenTests): + valid_fees_1 = 0 + valid_fees_2 = 0 + + +class ARC20FAKETokenTests(ARC20USDCTokenTests): + currency_configuration = cal.ALEO_FAKE_CURRENCY_CONFIGURATION + + +class ARC20FAKETokenTests2(GenericAleoTests): + currency_configuration = cal.ALEO_ARC20_USDT_CURRENCY_CONFIGURATION + + def perform_final_tx(self, destination, send_amount, fees, memo): + client = CommandSender(self.backend) + tx_datas = forge_arc20_token_public_transfer( + 0, fees, destination, send_amount, "fake_stablecoin.aleo" + ) + tx_datas["path"] = "m/44'/683'/0'/0'" + with client.sign_transaction(tx_datas=tx_datas): + pass + rapdu = client.get_async_response() + + if fees != 0: + tx_datas = forge_public_fee( + 0, + fees, + "7266375125414209082394925781071362722506946030314916664133746682226945366259field", + ) + with client.sign_transaction(tx_datas=tx_datas): + pass + rapdu = client.get_async_response() + + class TestsAleo: @pytest.mark.parametrize("test_to_run", ALL_TESTS_EXCEPT_MEMO_THORSWAP_AND_FEES) def test_aleo(self, backend, exchange_navigation_helper, test_to_run): @@ -240,3 +328,27 @@ def test_aleo_swap_fake_2(self, backend, exchange_navigation_helper): "swap_valid_1" ) assert e.value.status in [0xC000, 0x6A80] + + def test_aleo_swap_arc20_usdt(self, backend, exchange_navigation_helper): + ARC20USDCTokenTests(backend, exchange_navigation_helper).run_test( + "swap_valid_1" + ) + + def test_aleo_swap_arc20_usdt_zero_fee(self, backend, exchange_navigation_helper): + ZeroFeeARC20USDCTokenTests(backend, exchange_navigation_helper).run_test( + "swap_valid_1" + ) + + def test_aleo_swap_arc20_fake_1(self, backend, exchange_navigation_helper): + with pytest.raises(ExceptionRAPDU) as e: + ARC20FAKETokenTests(backend, exchange_navigation_helper).run_test( + "swap_valid_1" + ) + assert e.value.status in [0xC000] + + def test_aleo_swap_arc20_fake_2(self, backend, exchange_navigation_helper): + with pytest.raises(ExceptionRAPDU) as e: + ARC20FAKETokenTests2(backend, exchange_navigation_helper).run_test( + "swap_valid_1" + ) + assert e.value.status in [0xC000, 0x6A80] diff --git a/tools/python/gen_program_function.py b/tools/python/gen_program_function.py index b800f1ea..b0428de1 100644 --- a/tools/python/gen_program_function.py +++ b/tools/python/gen_program_function.py @@ -68,22 +68,7 @@ def add_c_header(c_file): print("#include // size_t", file=h_file) print(file=h_file) print('#include "types.h"', file=h_file) - print('#include "field.h"', file=h_file) - print(file=h_file) - - print("typedef enum {", file=h_file) - print(" NETWORK_ID_MAINNET = 0,", file=h_file) - print(" NETWORK_ID_TESTNET = 1,", file=h_file) - print(" NETWORK_ID_COUNT = 2,", file=h_file) - print("} network_id_e;", file=h_file) - print(file=h_file) - - print("typedef struct {", file=h_file) - print(" const char *string;", file=h_file) - print(" tx_type_e tx_type;", file=h_file) - print(" uint8_t input_count;", file=h_file) - print(" field_t bhp_1024_hashes[NETWORK_ID_COUNT];", file=h_file) - print("} function_parameters_t;", file=h_file) + print('#include "db.h"', file=h_file) print(file=h_file) print("typedef struct {", file=h_file) @@ -126,7 +111,7 @@ def add_c_header(c_file): for item in programs[program_id]: function_name = item["function"] print(" " + function_name) - print(f' {{.string = "{function_name}",', file=c_file) + print(f' {{.name = "{function_name}",', file=c_file) print(" .tx_type = {},".format(item["tx_type"]), file=c_file) print(" .input_count = {:d},".format(item["input_count"]), file=c_file) print(" .bhp_1024_hashes", file=c_file) diff --git a/tools/python/gen_tokens.py b/tools/python/gen_tokens.py index b2da6089..d85ea7ad 100644 --- a/tools/python/gen_tokens.py +++ b/tools/python/gen_tokens.py @@ -147,11 +147,16 @@ def add_c_header(c_file): f" = {{0x{digest.value.value[0]:016x}, 0x{digest.value.value[1]:016x}, 0x{digest.value.value[2]:016x}, 0x{digest.value.value[3]:016x}}}}}}}}},", file=c_file, ) - else: + elif token["mainnet_availability"]: print( f" = {{0x{digest.value.value[0]:016x}, 0x{digest.value.value[1]:016x}, 0x{digest.value.value[2]:016x}, 0x{digest.value.value[3]:016x}}}}},", file=c_file, ) + else: + print( + " = {0x00, 0x00, 0x00, 0x00}},", + file=c_file, + ) print("};", file=c_file) print(file=c_file) diff --git a/tools/python/program_function.json b/tools/python/program_function.json index 9363a87c..c7586be8 100644 --- a/tools/python/program_function.json +++ b/tools/python/program_function.json @@ -114,5 +114,157 @@ {"function" : "transfer_private_to_public_14", "tx_type" : "TX_ALEO_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", "input_count" : 15} + ], + "ldg_arc20_p_213.aleo" : [ + {"function" : "transfer_private_2", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 5}, + {"function" : "transfer_private_3", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 6}, + {"function" : "transfer_private_4", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 7}, + {"function" : "transfer_private_5", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 8}, + {"function" : "transfer_private_6", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 9}, + {"function" : "transfer_private_7", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 10}, + {"function" : "transfer_private_8", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 11}, + {"function" : "transfer_private_9", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 12}, + {"function" : "transfer_private_10", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 13}, + {"function" : "transfer_private_11", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 14}, + {"function" : "transfer_private_12", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 15}, + {"function" : "transfer_private_13", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 16} + ], + "ldg_arc20_p2p_213.aleo" : [ + {"function" : "transfer_private_to_public_2", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 5}, + {"function" : "transfer_private_to_public_3", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 6}, + {"function" : "transfer_private_to_public_4", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 7}, + {"function" : "transfer_private_to_public_5", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 8}, + {"function" : "transfer_private_to_public_6", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 9}, + {"function" : "transfer_private_to_public_7", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 10}, + {"function" : "transfer_private_to_public_8", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 11}, + {"function" : "transfer_private_to_public_9", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 12}, + {"function" : "transfer_private_to_public_10", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 13}, + {"function" : "transfer_private_to_public_11", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 14}, + {"function" : "transfer_private_to_public_12", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 15}, + {"function" : "transfer_private_to_public_13", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 16} + ], + "mm2_ldg_arc20_p_213.aleo" : [ + {"function" : "transfer_private_2", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 5}, + {"function" : "transfer_private_3", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 6}, + {"function" : "transfer_private_4", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 7}, + {"function" : "transfer_private_5", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 8}, + {"function" : "transfer_private_6", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 9}, + {"function" : "transfer_private_7", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 10}, + {"function" : "transfer_private_8", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 11}, + {"function" : "transfer_private_9", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 12}, + {"function" : "transfer_private_10", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 13}, + {"function" : "transfer_private_11", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 14}, + {"function" : "transfer_private_12", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 15}, + {"function" : "transfer_private_13", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE", + "input_count" : 16} + ], + "mm1_ldg_arc20_p2p_213.aleo" : [ + {"function" : "transfer_private_to_public_2", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 5}, + {"function" : "transfer_private_to_public_3", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 6}, + {"function" : "transfer_private_to_public_4", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 7}, + {"function" : "transfer_private_to_public_5", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 8}, + {"function" : "transfer_private_to_public_6", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 9}, + {"function" : "transfer_private_to_public_7", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 10}, + {"function" : "transfer_private_to_public_8", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 11}, + {"function" : "transfer_private_to_public_9", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 12}, + {"function" : "transfer_private_to_public_10", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 13}, + {"function" : "transfer_private_to_public_11", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 14}, + {"function" : "transfer_private_to_public_12", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 15}, + {"function" : "transfer_private_to_public_13", + "tx_type" : "TX_TOKEN_ARC20_TRANSFER_BATCH_PRIVATE_TO_PUBLIC", + "input_count" : 16} ] } diff --git a/tools/python/tokens.json b/tools/python/tokens.json index 9a02ba19..a534b834 100644 --- a/tools/python/tokens.json +++ b/tools/python/tokens.json @@ -5,6 +5,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USAD", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, "transfer_private" : {"input_count" : 4, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, @@ -20,6 +21,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USAD", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_2" : {"input_count" : 5, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, "transfer_private_3" : {"input_count" : 6, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, @@ -36,6 +38,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USAD", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_9" : {"input_count" : 12, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, "transfer_private_10" : {"input_count" : 13, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"} @@ -47,6 +50,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USAD", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_11" : {"input_count" : 14, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, "transfer_private_12" : {"input_count" : 15, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, @@ -60,6 +64,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USAD", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_to_public_2" : {"input_count" : 5, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, "transfer_private_to_public_3" : {"input_count" : 6, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, @@ -77,6 +82,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USAD", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_to_public_9" : {"input_count" : 12, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, "transfer_private_to_public_10" : {"input_count" : 13, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"} @@ -89,6 +95,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USAD", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_to_public_11" : {"input_count" : 14, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, "transfer_private_to_public_12" : {"input_count" : 15, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, @@ -103,6 +110,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USDCx", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, "transfer_private" : {"input_count" : 4, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, @@ -119,6 +127,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USDCx", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_2" : {"input_count" : 5, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, "transfer_private_3" : {"input_count" : 6, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, @@ -135,6 +144,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USDCx", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_9" : {"input_count" : 12, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, "transfer_private_10" : {"input_count" : 13, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"} @@ -146,6 +156,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USDCx", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_11" : {"input_count" : 14, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, "transfer_private_12" : {"input_count" : 15, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE"}, @@ -159,6 +170,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USDCx", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_to_public_2" : {"input_count" : 5, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, "transfer_private_to_public_3" : {"input_count" : 6, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, @@ -176,6 +188,7 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USDCx", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_to_public_9" : {"input_count" : 12, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, "transfer_private_to_public_10" : {"input_count" : 13, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"} @@ -188,10 +201,139 @@ "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", "ticker" : "USDCx", "decimals" : 6, + "mainnet_availability" : true, "functions" : { "transfer_private_to_public_11" : {"input_count" : 14, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, "transfer_private_to_public_12" : {"input_count" : 15, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"}, "transfer_private_to_public_13" : {"input_count" : 16, "tx_type" : "TX_TOKEN_TRANSFER_BATCH_PRIVATE_TO_PUBLIC"} } + }, + + "ETH" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "arc20_eth.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "ETH", + "decimals" : 18, + "mainnet_availability" : true, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } + }, + + "SOL" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "arc20_sol.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "SOL", + "decimals" : 9, + "mainnet_availability" : true, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } + }, + + "WBTC" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "arc20_wbtc.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "WBTC", + "decimals" : 8, + "mainnet_availability" : true, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } + }, + + "USDT" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "arc20_usdt.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "USDT", + "decimals" : 6, + "mainnet_availability" : true, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } + }, + + "ETH_TEST" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "test_arc20_eth.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "ETH", + "decimals" : 18, + "mainnet_availability" : false, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } + }, + + "SOL_TEST" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "test_arc20_sol.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "SOL", + "decimals" : 9, + "mainnet_availability" : false, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } + }, + + "WBTC_TEST" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "test_arc20_wbtc.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "WBTC", + "decimals" : 8, + "mainnet_availability" : false, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } + }, + + "USDT_TEST" : { + "token_type" : "TOKEN_TYPE_ARC20", + "program_name" : "test_arc20_usdt.aleo", + "token_id" : "0000000000000000000000000000000000000000000000000000000000000000000000000000field", + "ticker" : "USDT", + "decimals" : 6, + "mainnet_availability" : false, + "functions" : { + "transfer_public" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC"}, + "transfer_private" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE"}, + "transfer_public_to_private" : {"input_count" : 2, "tx_type" : "TX_TOKEN_TRANSFER_PUBLIC_TO_PRIVATE"}, + "transfer_private_to_public" : {"input_count" : 3, "tx_type" : "TX_TOKEN_TRANSFER_PRIVATE_TO_PUBLIC"}, + "join" : {"input_count" : 2, "tx_type" : "TX_TOKEN_JOIN"} + } } -} \ No newline at end of file +} diff --git a/unit-tests/test_signature.c b/unit-tests/test_signature.c index f221321a..e19af092 100644 --- a/unit-tests/test_signature.c +++ b/unit-tests/test_signature.c @@ -720,6 +720,73 @@ static void test_signature(void **state) check_field(&request_usad_batch_private.tcm, &tcm_13); check_scalar(&request_usad_batch_private.challenge, &challenge_13); check_scalar(&request_usad_batch_private.response, &response_13); + + prepared_request_t request_arc20_batch_private = { + .is_root = true, + .network_id = 1, + .program_id_length = 20, + .program_id = "ldg_arc20_p_213.aleo", + .function_name_length = 18, + .function_name = "transfer_private_2", + .inputs_count = 5, + .inputs + = {{.value_length = 31, + .value = (uint8_t *)"arc20_eth\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .type_length = 3, + .type = (uint8_t *) "\x02\x00\x11"}, + {.value_length = 96, .value = hash_record, .type_length = 1, .type = (uint8_t *) "\x06"}, + {.value_length = 96, .value = hash_record, .type_length = 1, .type = (uint8_t *) "\x06"}, + {.value_length = 32, + .value = (uint8_t *) "\x82\x48\xd5\xe8\x5a\xc4\xc1\x23\x46\xf8\x45\x8b\xd9\x39\xf1\xce" + "\x25\xae\x03\xe9\xc6\xcb\xc8\x86\x28\x6d\xf1\x61\x63\x0a\x75\x0c", + .type_length = 3, + .type = (uint8_t *) "\x02\x00\x00"}, + {.value_length = 16, + .value = (uint8_t *) "\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .type_length = 3, + .type = (uint8_t *) "\x01\x00\x0c"}}, + .program_checksum = NULL, + .nested_call_count = 2, + }; + + scalar_t r_14 = { + .big.u64 = {0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000} + }; + field_t tvk_14 = { + .big.u64 = {0xfcd99dd33fd711b9, 0x3085372523a8663b, 0x69091782d0a1eb9e, 0x56f3af574b36c6a} + }; + group_t tpk_14 = { + .x.big.u64 + = {0xe8b1b5b13b95e77d, 0xe55190c120afffca, 0x903d7a482cacfa01, 0xb25f7526348007b}, + .y.big.u64 + = {0x9cf6379fb4164e10, 0x2c579edeb53e4c5e, 0xe937cc4854754624, 0xbcaeaa8087b3b4b} + }; + field_t tcm_14 = { + .big.u64 = {0x25910ef54db490ed, 0x1748ffd6736145e7, 0x288b9a16ca91d094, 0x220b2a6efe46d2c} + }; + scalar_t challenge_14 = { + .big.u64 = {0xa2e465527fc07a34, 0xc9a0515bc3e2196d, 0x6d14e0d9c8a39684, 0x3db2afaa91051c} + }; + scalar_t response_14 = { + .big.u64 = {0xdc3cd043fcca940c, 0x44a467f09fc87f22, 0x98492a6cfc382e30, 0x39345663863263d} + }; + + memcpy(program_checksum, program_checksum_c, 32); + request.program_checksum = program_checksum; + memcpy(hash_record, hash_record_c, 96); + request_arc20_batch_private.gammas_count = 0; + prepare_random_ok(random_bn); + prepare_scalar_mult_ok(); + prepare_scalar_mult_ok(); + assert_int_equal(sign_prepared_request(&G_context.account, &request_arc20_batch_private), 0); + assert_int_equal(request_arc20_batch_private.gammas_count, 0); + check_scalar(&request_arc20_batch_private.r, &r_14); + check_field(&request_arc20_batch_private.tvk, &tvk_14); + check_group(&request_arc20_batch_private.tpk, &tpk_14); + check_field(&request_arc20_batch_private.tcm, &tcm_14); + check_scalar(&request_arc20_batch_private.challenge, &challenge_14); + check_scalar(&request_arc20_batch_private.response, &response_14); } int main() diff --git a/unit-tests/test_transaction.c b/unit-tests/test_transaction.c index 9c34a608..151a5665 100644 --- a/unit-tests/test_transaction.c +++ b/unit-tests/test_transaction.c @@ -8,6 +8,7 @@ #include #include "os.h" +#include "db.h" #include "tx.h" global_ctx_t G_context; @@ -190,6 +191,15 @@ static void test_tx_parse(void **state) assert_int_equal(tx_parse(&datas_public, &tx), -1); datas_public.prepared_request.inputs_count = 2; + // network_id must be rejected as soon as it reaches or exceeds NETWORK_ID_COUNT, + // even though bhp_1024_hashes[] is a wider byte array: indexing must be bounded + // by the element count, not sizeof(array). + datas_public.prepared_request.network_id = NETWORK_ID_COUNT; + assert_int_equal(tx_parse(&datas_public, &tx), -1); + datas_public.prepared_request.network_id = NETWORK_ID_COUNT - 1; + assert_int_equal(tx_parse(&datas_public, &tx), 0); + datas_public.prepared_request.network_id = 0; + // get_u64 datas_public.prepared_request.inputs[1].type_length = 2; assert_int_equal(tx_parse(&datas_public, &tx), -1); @@ -613,11 +623,186 @@ static void test_tx_token_parse(void **state) assert_int_equal(tx_parse(&datas_token_batch_private, &tx), 0); } + +static void test_tx_token_arc20_parse(void **state) +{ + (void) state; + memset(&G_context, 0, sizeof(G_context)); + tx_t tx; + + sign_transaction_datas_t datas_arc20_public = { + .max_base_fee = 100, + .max_priority_fee = 500, + .fee_function_name_length = 10, + .fee_function_name = "fee_public", + .fee_program_id_length = 12, + .fee_program_id = "credits.aleo", + .prepared_request = { + .program_id_length = 15, + .program_id = "arc20_usdt.aleo", + .function_name_length = 15, + .function_name = "transfer_public", + .inputs_count = 2, + .inputs + = {{.value_length = 32, + .value + = (uint8_t *) "\x82\x48\xd5\xe8\x5a\xc4\xc1\x23\x46\xf8\x45\x8b\xd9\x39\xf1\xce" + "\x25\xae\x03\xe9\xc6\xcb\xc8\x86\x28\x6d\xf1\x61\x63\x0a\x75\x0c", + .type_length = 3, + .type = (uint8_t *) "\x01\x00\x00"}, + {.value_length = 16, + .value + = (uint8_t *) "\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .type_length = 3, + .type = (uint8_t *) "\x01\x00\x0d"}}, + } + }; + + assert_int_equal(tx_parse(&datas_arc20_public, &tx), 0); + + datas_arc20_public.prepared_request.inputs[1].type_length = 2; + assert_int_equal(tx_parse(&datas_arc20_public, &tx), -1); + datas_arc20_public.prepared_request.inputs[1].type_length = 3; + + uint8_t type_1[3] = "\x01\x00\x0d"; + uint8_t type_2[3] = "\x02\x00\x0d"; + uint8_t type_3[3] = "\x01\x01\x0d"; + datas_arc20_public.prepared_request.inputs[1].type = type_2; + assert_int_equal(tx_parse(&datas_arc20_public, &tx), -1); + datas_arc20_public.prepared_request.inputs[1].type = type_3; + assert_int_equal(tx_parse(&datas_arc20_public, &tx), -1); + datas_arc20_public.prepared_request.inputs[1].type = type_1; + + uint8_t type_11[3] = "\x01\x00\x00"; + uint8_t type_12[3] = "\x02\x00\x00"; + char function_name_2[26] = "transfer_public_to_private"; + datas_arc20_public.prepared_request.function_name_length = sizeof(function_name_2); + datas_arc20_public.prepared_request.function_name = function_name_2; + datas_arc20_public.prepared_request.inputs[0].type = type_12; + assert_int_equal(tx_parse(&datas_arc20_public, &tx), 0); + datas_arc20_public.prepared_request.inputs[0].type = type_11; + assert_int_equal(tx_parse(&datas_arc20_public, &tx), -1); + + const uint8_t hash_record_c[96] + = "\xf4\x69\x19\x61\x50\x7b\x8f\x32\x92\xaf\x47\xac\x64\xdf\x59\xf7" + "\xc4\x39\xf6\xb2\x48\xa9\x55\x10\xfa\x95\xcc\x96\x25\xe7\xfd\x07" + "\x2a\xe1\x18\xb5\x2d\x46\xd6\x0b\x96\x63\x06\x72\x73\x3d\x25\x2c" + "\xa9\x3f\xbb\x8d\x56\xd5\x26\x1c\x0c\x4c\xbb\x8c\xf2\x92\x5d\x05" + "\xd9\x75\x64\x3e\x43\x24\x5c\x7a\xf2\x8d\xb2\xa8\x5b\x54\x59\xb4" + "\xb7\x7b\x38\x2a\x0c\x74\x33\x0c\x1d\x53\x7a\xa9\x22\xe1\x7c\x00"; + uint8_t hash_record[96]; + memcpy(hash_record, hash_record_c, sizeof(hash_record)); + + // For ARC20 tokens, the record input (index 0) is not parsed for + // transfer_private/transfer_private_to_public: the address and amount are + // read from indexes 1 and 2 instead of 0 and 1 as for ARC22 tokens. + sign_transaction_datas_t datas_arc20_private = { + .max_base_fee = 100, + .max_priority_fee = 500, + .fee_function_name_length = 11, + .fee_function_name = "fee_private", + .fee_program_id_length = 12, + .fee_program_id = "credits.aleo", + .prepared_request + = {.program_id_length = 15, + .program_id = "arc20_usdt.aleo", + .function_name_length = 16, + .function_name = "transfer_private", + .inputs_count = 3, + .inputs = { + {.value_length = 96, + .value = hash_record, + .type_length = 9, + .type = (uint8_t *) "\x03\x07\x63\x72\x65\x64\x69\x74\x73"}, + {.value_length = 32, + .value + = (uint8_t *) "\x82\x48\xd5\xe8\x5a\xc4\xc1\x23\x46\xf8\x45\x8b\xd9\x39\xf1\xce" + "\x25\xae\x03\xe9\xc6\xcb\xc8\x86\x28\x6d\xf1\x61\x63\x0a\x75\x0c", + .type_length = 3, + .type = (uint8_t *) "\x02\x00\x00"}, + {.value_length = 16, + .value + = (uint8_t *) "\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .type_length = 3, + .type = (uint8_t *) "\x02\x00\x0d"}, + }} + }; + + assert_int_equal(tx_parse(&datas_arc20_private, &tx), 0); + + datas_arc20_private.prepared_request.inputs[1].type = type_11; + assert_int_equal(tx_parse(&datas_arc20_private, &tx), -1); + datas_arc20_private.prepared_request.inputs[1].type = type_12; + + char function_name_3[26] = "transfer_private_to_public"; + datas_arc20_private.prepared_request.function_name_length = sizeof(function_name_3); + datas_arc20_private.prepared_request.function_name = function_name_3; + assert_int_equal(tx_parse(&datas_arc20_private, &tx), 0); + + datas_arc20_private.prepared_request.inputs[2].type = type_11; + assert_int_equal(tx_parse(&datas_arc20_private, &tx), -1); + + sign_transaction_datas_t datas_arc20_batch_private = { + .max_base_fee = 100, + .max_priority_fee = 500, + .fee_function_name_length = 11, + .fee_function_name = "fee_private", + .fee_program_id_length = 12, + .fee_program_id = "credits.aleo", + .prepared_request + = {.program_id_length = 20, + .program_id = "ldg_arc20_p_213.aleo", + .function_name_length = 18, + .function_name = "transfer_private_2", + .inputs_count = 5, + .inputs = { + {.value_length = 31, + .value = (uint8_t *)"arc20_eth\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .type_length = 3, + .type = (uint8_t *) "\x02\x00\x11"}, + {.value_length = 96, + .value = hash_record, + .type_length = 9, + .type = (uint8_t *) "\x06"}, + {.value_length = 96, + .value = hash_record, + .type_length = 9, + .type = (uint8_t *) "\x06"}, + {.value_length = 32, + .value + = (uint8_t *) "\x82\x48\xd5\xe8\x5a\xc4\xc1\x23\x46\xf8\x45\x8b\xd9\x39\xf1\xce" + "\x25\xae\x03\xe9\xc6\xcb\xc8\x86\x28\x6d\xf1\x61\x63\x0a\x75\x0c", + .type_length = 3, + .type = (uint8_t *) "\x02\x00\x00"}, + {.value_length = 16, + .value + = (uint8_t *) "\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", + .type_length = 3, + .type = (uint8_t *) "\x02\x00\x0d"}, + }} + }; + memcpy(hash_record, hash_record_c, sizeof(hash_record)); + assert_int_equal(tx_parse(&datas_arc20_batch_private, &tx), 0); + + char program_id_5[22] = "ldg_arc20_p2p_213.aleo"; + datas_arc20_batch_private.prepared_request.program_id_length = sizeof(program_id_5); + datas_arc20_batch_private.prepared_request.program_id = program_id_5; + char function_name_5[28] = "transfer_private_to_public_2"; + datas_arc20_batch_private.prepared_request.function_name_length = sizeof(function_name_5); + datas_arc20_batch_private.prepared_request.function_name = function_name_5; + datas_arc20_batch_private.prepared_request.inputs[3].type = type_11; + datas_arc20_batch_private.prepared_request.inputs[4].type = type_1; + assert_int_equal(tx_parse(&datas_arc20_batch_private, &tx), 0); +} + int main() { - const struct CMUnitTest tests[] = {cmocka_unit_test(test_tx_extract), - cmocka_unit_test(test_tx_parse), - cmocka_unit_test(test_tx_token_parse)}; + const struct CMUnitTest tests[] + = {cmocka_unit_test(test_tx_extract), + cmocka_unit_test(test_tx_parse), + cmocka_unit_test(test_tx_token_parse), + cmocka_unit_test(test_tx_token_arc20_parse)}; return cmocka_run_group_tests(tests, NULL, NULL); }