From c681c4ff38d46afd2d1dead4e0051b9d51a2aef9 Mon Sep 17 00:00:00 2001 From: Jakub Date: Sat, 23 Nov 2024 01:07:51 +0100 Subject: [PATCH 1/4] Update Chain ID for testnet domain in withdraw We update the Chain ID defined for testnet domain used in withdrawal transaction hash calculation. The value has to match the Ethereum Sepolia Chain ID which is 11155111 (0xaa36a7). Previously we used 1115511 (0x110577) which was a typo. --- src/handler/withdraw.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/handler/withdraw.c b/src/handler/withdraw.c index 80d9ba24..798e7f77 100644 --- a/src/handler/withdraw.c +++ b/src/handler/withdraw.c @@ -60,14 +60,16 @@ static unsigned char const BSM_SIGN_MAGIC[] = {'\x18', 'B', 'i', 't', 'c', 'o', #error "COIN_VARIANT is not defined" #elif COIN_VARIANT == COIN_VARIANT_ACRE // Mainnet hash +// Mainnet Chain ID - 1 (0x01) static const uint8_t abi_encoded_chain_id[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}; #elif COIN_VARIANT == COIN_VARIANT_ACRE_TESTNET // Testnet hash +// Sepolia Chain ID - 11155111 (0xaa36a7) static const uint8_t abi_encoded_chain_id[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x05, 0x77}; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x36, 0xa7}; #else #error "Unsupported COIN_VARIANT value" #endif @@ -823,4 +825,4 @@ void handler_withdraw(dispatcher_context_t* dc, uint8_t protocol_version) { PRINTF("Error in ui_post_processing_confirm_withdraw"); } return; -} \ No newline at end of file +} From 0fcac583c6f2d58851526d6bc7564c63e91e6924 Mon Sep 17 00:00:00 2001 From: Jakub Date: Sat, 23 Nov 2024 01:11:06 +0100 Subject: [PATCH 2/4] Bump version to 1.1.5 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 870e1ba2..ea4bf7d2 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,7 @@ PATH_APP_LOAD_PARAMS = "" # Application version APPVERSION_M = 1 APPVERSION_N = 1 -APPVERSION_P = 4 +APPVERSION_P = 5 APPVERSION_SUFFIX = # if not empty, appended at the end. Do not add a dash. ifeq ($(APPVERSION_SUFFIX),) From 1bed7cb231cfe51de79c20b82ad07634532e0cf1 Mon Sep 17 00:00:00 2001 From: Jakub Date: Sat, 23 Nov 2024 01:20:20 +0100 Subject: [PATCH 3/4] Update expected result for sign withdraw test The expected result for the sign withdraw test has been updated to reflect the changes in the withdrawal domain hash calculation. --- tests/test_sign_withdraw.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_sign_withdraw.py b/tests/test_sign_withdraw.py index abedd61a..e7836559 100644 --- a/tests/test_sign_withdraw.py +++ b/tests/test_sign_withdraw.py @@ -22,12 +22,12 @@ def test_sign_withdraw(navigator: Navigator, firmware: Firmware, client: RaggerC gasToken= "0x0000000000000000000000000000000000000000", refundReceiver= "0x0000000000000000000000000000000000000000", nonce= "0x8", - ) # tx_hash: 0xed3a7a50496ccca6173ddd9a1ad786d61ea737b70541887ab2c2fadcbe36eeaf + ) # tx_hash: 0xa580c0c5a0b8e731f7b7fe8ea3ee41cf0dbe78b352b55ae090160659e2d7410c path = "m/44'/0'/0'/0/0" result = client.sign_withdraw(data, path, navigator, instructions=withdrawal_instruction_approve(firmware), testname=test_name) - assert result == "IEZDsLh2JweulEOzl2dgLrYvtIqWUW8gFeYdMLAYSk7PeH72uN0JQJGVCYZSpJ5HYRaKZrmSBiG3Ypl+oelXEAM=" + assert result == "Hy2UpLBXRUkHBRfXIEYFB8PEteLtjxrqJ7kJ3Qe+i67wP0bzDkFl5Z4bYBFfT/3+xwgPrw3T0rkq6dv53Cff+p0=" def test_sign_withdraw_wrong_address(navigator: Navigator, firmware: Firmware, client: RaggerClient, test_name: str): data = AcreWithdrawalData( From 3021f208a4200ccfcefcc2fe41966e0538acec1b Mon Sep 17 00:00:00 2001 From: Jakub Date: Sat, 23 Nov 2024 01:21:30 +0100 Subject: [PATCH 4/4] Update test golden snapshots for version --- tests/snapshots/flex/test_dashboard/00001.png | Bin 10748 -> 10839 bytes .../snapshots/nanosp/test_dashboard/00001.png | Bin 347 -> 349 bytes .../snapshots/nanox/test_dashboard/00001.png | Bin 347 -> 349 bytes tests/snapshots/stax/test_dashboard/00001.png | Bin 9695 -> 9781 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/snapshots/flex/test_dashboard/00001.png b/tests/snapshots/flex/test_dashboard/00001.png index c3851fb52e052acfd8f85a41e04b299280a0aed1..db38aea5420bdcf8423b08a84342fe7930f8153b 100644 GIT binary patch literal 10839 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 R0X#4Y*jhPQR-U^N{~wmD&&B`% literal 10748 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 DG@i8p diff --git a/tests/snapshots/nanosp/test_dashboard/00001.png b/tests/snapshots/nanosp/test_dashboard/00001.png index 6a2052be7177a6188042df26f1a7c12e1e013945..b2cd426e7cbedf4f3963125abd150417ee244ac4 100644 GIT binary patch delta 322 zcmcc3beCy@O1+Awi(^Q|oVPcl`3@-vv?iLoYx%36`Rx(&#GX46 zaedn&=Mdc&q%OU0^`s}+RplC0OQrs#UrE1V&sd-7^(xY`!#d>hwi#dd_T4Kw|AyPZ zpl^-F)blmwl`&1<+;2wLznYwPI#}$$6H~qA!7?Y@H&4%dt9mbc>n6eXCHfbQU$y!C z+Mem+`^$VW+q8&QosZTzEBn4D8udA|t)H}aS=DR~^`#oK&p%DOEMoId_!`^i^4^ti ztMp%Rg;$?rw$2t?@K5EzwC}1Jl_Cdj)UZmd(K>qkZ>7Bu!m|twukQt!@7&p_?YkZ% N>gnp|vd$@?2>=jIkP!d? delta 320 zcmcc1bem~{O1+Y&i(^Q|oVPb(`I;33+yXC^sK2TA+&tZGf}aLgM7@>qw|VM|6Hb_S zBzZ9)z=LHjE-urKv*(K*y6 zaedn&=Mdc&q%OU0^`s}+RplC0OQrs#UrE1V&sd-7^(xY`!#d>hwi#dd_T4Kw|AyPZ zpl^-F)blmwl`&1<+;2wLznYwPI#}$$6H~qA!7?Y@H&4%dt9mbc>n6eXCHfbQU$y!C z+Mem+`^$VW+q8&QosZTzEBn4D8udA|t)H}aS=DR~^`#oK&p%DOEMoId_!`^i^4^ti ztMp%Rg;$?rw$2t?@K5EzwC}1Jl_Cdj)UZmd(K>qkZ>7Bu!m|twukQt!@7&p_?YkZ% N>gnp|vd$@?2>=jIkP!d? delta 320 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 WkJ_)%zV;AsA?=)htNYde&;JJ|ldm!W delta 6481 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