diff --git a/.gitignore b/.gitignore index 814b669..246e261 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,6 @@ __pycache__/ ledger/ # Build directory build/ + +# VSCode +.vscode/ diff --git a/Cargo.lock b/Cargo.lock index f6331dd..ece13d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -549,9 +549,9 @@ dependencies = [ [[package]] name = "include_gif" -version = "1.2.6" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4046578028f0249b76fb88acb6a0eac1f635bf9e2630ba5d0562831597ffc323" +checksum = "59152fb9707e856f65a10a25ba0b7141589bcf5cbe7f653fcda2875e45fc78f7" dependencies = [ "flate2", "image", @@ -612,9 +612,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "ledger_device_sdk" -version = "1.34.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adde0c75d115974c33db5e8e50dbf809d874d64ea970570cd6cc523ce009d6b" +checksum = "85fc7dea35e2d9d0a305fc9594539af5f510cd7c2d764f944542c4710731ae58" dependencies = [ "const-zero", "include_gif", @@ -628,9 +628,9 @@ dependencies = [ [[package]] name = "ledger_secure_sdk_sys" -version = "1.15.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f18ccb022d22741651f4a13bb417e2e5f4f2d68b832409b80bdc3726e76b1bd9" +checksum = "58d50b8764859daf1b5176c5aad8ccc989494c16b08fa266e22c7907e60956e9" dependencies = [ "bindgen", "cc", diff --git a/Cargo.toml b/Cargo.toml index 2c026a3..74d068f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,8 +5,8 @@ edition = "2021" [dependencies] messages = { path = "./messages" } -ledger_device_sdk = "1.34.0" -ledger_secure_sdk_sys = "1.15.0" +ledger_device_sdk = "1.35.1" +ledger_secure_sdk_sys = "1.16.1" hex = { version = "0.4.3", default-features = false, features = ["alloc"] } bech32 = { version = "0.11", default-features = false, features = ["alloc"] } chrono = { version = "0.4", default-features = false, features = ["alloc"] } diff --git a/README.md b/README.md index dadff25..326d124 100644 --- a/README.md +++ b/README.md @@ -143,3 +143,7 @@ The following workflows are executed in [GitHub Actions](https://github.com/feat - Various lint checks : - Source code lint checks with `cargo fmt` - Python functional test code lint checks with `pylint` and `mypy` + +## Additional documentation + +For development guidelines related to the app's memory usage see [docs/memory_usage.md](docs/memory_usage.md). diff --git a/docs/memory_usage.md b/docs/memory_usage.md new file mode 100644 index 0000000..71a8fba --- /dev/null +++ b/docs/memory_usage.md @@ -0,0 +1,94 @@ +# Memory usage + +## Device memory size + +Judging by `.ld` files in [the Ledger Rust SDK](https://github.com/LedgerHQ/ledger-device-rust-sdk/tree/cad196841dbd72c037cfa01bec81a4a3ae57a04e/ledger_secure_sdk_sys/devices), +the amount of SRAM each model has is: +| Device | SRAM | +| ----------------- | ---- | +| apex_p, nanosplus | 40KB | +| flex, stax | 36KB | +| nanox | 28KB | + +The first part of the RAM will be occupied by the app's globals (one of which will be the heap used by the Rust code) and the rest is stack. + +The `HEAP_SIZE` variable in `.cargo/config.toml` specifies the size of the Rust heap (which is just [a static array under the hood](https://github.com/LedgerHQ/ledger-device-rust-sdk/blob/cad196841dbd72c037cfa01bec81a4a3ae57a04e/ledger_secure_sdk_sys/src/lib.rs#L64)). + +I.e. the bigger `HEAP_SIZE` is, the less is the stack. And with the `HEAP_SIZE` of 16KB, we'll have less than 12KB of stack at nanox. + +## Reducing app stack usage + +- Function's parameters and the return value consume stack space (unless the object is small enough to be put into a register). +- Moving an object around inside the function body may increase stack consumption as well. + +So, +- Box large types if you need to pass/return them by value. +- Avoid unboxing boxed large objects when passing them by value. E.g. even if a function only needs `LargeObj`, + pass `Box` to it anyway (which would be discouraged by the "normal" best practices), because passing it + unboxed would increase the stack usage.\ + This includes the case when a member function consumes `self` - declare it as `self: Box` instead. +- `sizeof` of 200 bytes is probably large enough. E.g. in the past boxing certain objects of roughly this size + decreased stack usage by roughly 1.3KB (which is more than 10% of all stack space available on nanox). + +### Determining the current stack usage of the app + +Build the app with `emit-stack-sizes`: +``` +RUSTFLAGS="-Z emit-stack-sizes" cargo ledger build nanox +``` +After that you can use `llvm-readobj` to obtain sizes of stack frames of each function: +``` +llvm-readobj --stack-sizes --demangle target/nanox/release/mintlayer-app +``` + +You can also force `llvm-readobj` to emit json and use `jq` to sort the output by the stack size. E.g. the following +will print 20 functions with the biggest stack frame size: +``` +llvm-readobj --stack-sizes --demangle --elf-output-style=JSON target/nanox/release/mintlayer-app | jq -r '.[].StackSizes | sort_by(.Entry.Size) | reverse | .[:20][] | .Entry | "\(.Size)\t\(.Functions | join(", "))"' +``` + +### Determining the actual available stack + +At least in the current version of the SDK, the linker script emits symbols that +can be used to determine the actual stack size, e.g. via `llvm-readelf`: +``` +llvm-readelf -s target/nanox/release/mintlayer-app | rg '_stack|_estack' +``` +Example output: +``` +1581: da7a425c 0 NOTYPE GLOBAL DEFAULT 6 app_stack_canary +1624: da7a7000 0 NOTYPE GLOBAL DEFAULT 6 _estack +1697: da7a4260 0 NOTYPE GLOBAL DEFAULT 6 _stack +``` +Here `_estack` is the end of the stack area, `_stack` is the beginning of it and `app_stack_canary` is a 4-byte marker +placed just below `_stack` and used to detect stack overflows. The difference between `_estack` and `_stack` will be +the stack size, in this case it's da7a7000-da7a4260=2DA0 (11680 in decimal). + +### Other notes + +This code: +``` +fn foo(x: &X) { + match x { + X::A => { /*do stuff*/ }, + X::B => { /*do other stuff*/ }, + } +} +``` +may use more stack than: +``` +fn foo(x: &X) { + match x { + X::A => stuff(), + X::B => other_stuff(), + } +} + +#[inline(never)] fn stuff() { /*do stuff*/ } +#[inline(never)] fn other_stuff() { /*do other stuff*/ } +``` +I.e. it seems that LLVM cannot always reuse stack slots between different branches of the `match`, and with bigger enums +and bigger stack usage in each branch the overhead becomes bigger as well. So, splitting a large `match` into separate +non-inlinable functions may be a way of reducing the app's stack usage, but this should probably be the last resort, +because if all large objects are boxed, the stack usage in each branch should be relatively small, which will make +the overhead relatively small as well. diff --git a/messages/Cargo.toml b/messages/Cargo.toml index aed18f0..dcceb54 100644 --- a/messages/Cargo.toml +++ b/messages/Cargo.toml @@ -10,9 +10,11 @@ edition = "2024" # # Fix reference: https://github.com/paritytech/parity-scale-codec/pull/751 # This fix should be included in releases after version 3.7.5. +# Note: normally we would enable the "chain-error" feature of parity-scale-codec to make decode errors +# more informative. But in the Ledger app we never examine or even print those errors, so enabling this +# feature would only increase the size of the binary and make the app use more stack during decoding. parity-scale-codec = { git = "https://github.com/paritytech/parity-scale-codec.git", rev = "5021525697edc0661591ebc71392c48d950a10b0", default-features = false, features = [ "derive", - "chain-error", ] } num_enum = { version = "0.7.5", default-features = false } diff --git a/messages/src/lib.rs b/messages/src/lib.rs index c15e47f..eac377f 100644 --- a/messages/src/lib.rs +++ b/messages/src/lib.rs @@ -20,7 +20,7 @@ // Required for using String, Vec, format!... extern crate alloc; -use alloc::vec::Vec; +use alloc::{boxed::Box, vec::Vec}; use core::iter::ExactSizeIterator; use derive_more::Display; @@ -95,9 +95,9 @@ pub struct SignMessageReq { #[derive(Encode, Decode)] pub enum SignTxReq { - Input(TxInputReq), - InputCommitment(mlcp::SighashInputCommitment), - Output(TxOutputReq), + Input(Box), + InputCommitment(Box), + Output(Box), NextSignature, } @@ -402,16 +402,24 @@ pub enum StatusWord { // Standard Ledger APDU Codes #[display("Success")] Ok = 0x9000, + #[display("Nothing received")] + NothingReceived = 0x6982, #[display("User cancelled")] Deny = 0x6985, #[display("CLA not supported")] ClaNotSupported = 0x6E00, - #[display("Wrong P1/P2 parameters")] - WrongP1P2 = 0x6B00, #[display("Instruction not supported")] - InsNotSupported = 0x6D00, + InsNotSupported = 0x6E01, + #[display("Wrong P1/P2 parameters")] + WrongP1P2 = 0x6E02, #[display("Wrong APDU length")] - WrongApduLength = 0x6700, + WrongApduLength = 0x6E03, + #[display("Unknown")] + Unknown = 0x6D00, + #[display("Panic")] + Panic = 0xE000, + #[display("Device locked")] + DeviceLocked = 0x5515, // App Specific Errors (0xB...) #[display("Transaction display failed")] @@ -454,6 +462,8 @@ pub enum StatusWord { MaxBufferLenExceeded = 0xB012, #[display("Different input commitment hash")] DifferentInputCommitmentHash = 0xB013, + #[display("Invalid Timestamp")] + InvalidTimestamp = 0xB014, // Ecc Errors #[display("ECC Carry")] diff --git a/src/app_ui/sign.rs b/src/app_ui/sign.rs index 2983c77..767e82d 100644 --- a/src/app_ui/sign.rs +++ b/src/app_ui/sign.rs @@ -159,7 +159,7 @@ fn transaction_title(tx_type: &Option) -> &'static str { Some(TxType::Htlc) => "Sign create HTLC transaction", Some(TxType::CreateDelegation) => "Sign create delegation transaction", Some(TxType::DelegationStake) => "Sign stake delegation transaction", - Some(TxType::DelegationWithdrawl) => "Sign withdrawal delegation transaction", + Some(TxType::DelegationWithdrawal) => "Sign withdrawal delegation transaction", Some(TxType::CreateStakePool) => "Sign create stake pool transaction", Some(TxType::DecommissionStakePool) => "Sign decommission stake pool transaction", Some(TxType::CreateNft) => "Sign create NFT transaction", @@ -478,7 +478,7 @@ fn format_input(input: &InputCommand, coin: CoinType) -> Result StatusWord { CxError::GenericError => StatusWord::EccGenericError, } } + +pub fn sdk_err_to_status(e: ledger_device_sdk::io::StatusWords) -> StatusWord { + match e { + ledger_device_sdk::io::StatusWords::Ok => StatusWord::Ok, + ledger_device_sdk::io::StatusWords::BadCla => StatusWord::ClaNotSupported, + ledger_device_sdk::io::StatusWords::NothingReceived => StatusWord::NothingReceived, + ledger_device_sdk::io::StatusWords::BadIns => StatusWord::InsNotSupported, + ledger_device_sdk::io::StatusWords::BadP1P2 => StatusWord::WrongP1P2, + ledger_device_sdk::io::StatusWords::BadLen => StatusWord::WrongApduLength, + ledger_device_sdk::io::StatusWords::UserCancelled => StatusWord::Deny, + ledger_device_sdk::io::StatusWords::Unknown => StatusWord::Unknown, + ledger_device_sdk::io::StatusWords::Panic => StatusWord::Panic, + ledger_device_sdk::io::StatusWords::DeviceLocked => StatusWord::DeviceLocked, + } +} diff --git a/src/handlers/sign_tx/mod.rs b/src/handlers/sign_tx/mod.rs index 11ea711..a610f67 100644 --- a/src/handlers/sign_tx/mod.rs +++ b/src/handlers/sign_tx/mod.rs @@ -15,10 +15,7 @@ * limitations under the License. *****************************************************************************/ -use alloc::{ - vec::Vec, - boxed::Box, -}; +use alloc::{boxed::Box, vec::Vec}; use crate::{ app_ui::sign::{ @@ -124,7 +121,7 @@ pub struct TxParsingInputCommitmentsContext { impl TxParsingInputCommitmentsContext { fn advance_next_input_additional_info_step( - mut self, + mut self: Box, review: &NbglStreamingReview, ) -> Result { let finished_with_inputs = self.num_inputs_parsed >= (self.metadata.num_inputs - 1); @@ -153,7 +150,7 @@ impl TxParsingInputCommitmentsContext { self.tx_hasher .update(&encode_as_compact(self.metadata.num_outputs)) .map_err(|_| StatusWord::TxHashFail)?; - let new_context = TxParsingContext::ParsingOutputs(TxParsingOutputsContext { + let new_context = TxParsingContext::ParsingOutputs(Box::new(TxParsingOutputsContext { metadata: self.metadata, tx_hasher: self.tx_hasher, @@ -164,7 +161,7 @@ impl TxParsingInputCommitmentsContext { spinner: self.spinner, num_outputs_parsed: 0, - }); + })); Ok(new_context) } else { self.num_inputs_parsed += 1; @@ -174,7 +171,7 @@ impl TxParsingInputCommitmentsContext { } impl TxParsingInputsContext { - fn advance_next_input_step(mut self) -> Result { + fn advance_next_input_step(mut self: Box) -> Result { self.num_inputs_parsed += 1; let finished_with_inputs = self.num_inputs_parsed >= self.metadata.num_inputs; @@ -193,7 +190,7 @@ impl TxParsingInputsContext { .finalize(&mut input_commitments_hash) .map_err(|_| StatusWord::TxHashFail)?; - Ok(TxParsingContext::ParsingInputCommitments( + Ok(TxParsingContext::ParsingInputCommitments(Box::new( TxParsingInputCommitmentsContext { metadata: self.metadata, tx_hasher: self.tx_hasher, @@ -204,7 +201,7 @@ impl TxParsingInputsContext { spinner: self.spinner, num_inputs_parsed: 0, }, - )) + ))) } else { Ok(TxParsingContext::ParsingInputs(self)) } @@ -234,7 +231,7 @@ impl TxParsingOutputsContext { } fn advance_next_output_state( - mut self, + mut self: Box, review: &NbglStreamingReview, ) -> Result { if self.num_outputs_parsed < (self.metadata.num_outputs - 1) { @@ -250,13 +247,13 @@ impl TxParsingOutputsContext { let tx_hash = mintlayer_hash(&message_hash[0..32])?; if ui_approve_streaming_review(review, &self)? { - Ok(TxParsingContext::Signing(TxSigningContext { + Ok(TxParsingContext::Signing(Box::new(TxSigningContext { metadata: self.metadata, inputs: self.inputs, spinner: self.spinner, num_inputs_signed: 0, tx_hash, - })) + }))) } else { Err(StatusWord::Deny) } @@ -277,7 +274,7 @@ pub struct TxSigningContext { impl TxSigningContext { fn compute_signature_and_append( - mut self, + mut self: Box, ) -> Result<(TxInputSignatureResponse, TxParsingContext), StatusWord> { let address = self .inputs @@ -315,10 +312,10 @@ impl TxSigningContext { } pub enum TxParsingContext { - ParsingInputs(TxParsingInputsContext), - ParsingInputCommitments(TxParsingInputCommitmentsContext), - ParsingOutputs(TxParsingOutputsContext), - Signing(TxSigningContext), + ParsingInputs(Box), + ParsingInputCommitments(Box), + ParsingOutputs(Box), + Signing(Box), Finished, } @@ -349,7 +346,7 @@ impl TxParsingContext { .update(&num_inputs.to_le_bytes()) .map_err(|_| StatusWord::TxHashFail)?; - Ok(Self::ParsingInputs(TxParsingInputsContext { + Ok(Self::ParsingInputs(Box::new(TxParsingInputsContext { metadata: TxMetadata { coin: coin.into(), num_inputs, @@ -361,7 +358,7 @@ impl TxParsingContext { num_inputs_parsed: 0, input_commitments_hasher: Blake2b_512::new(), inputs: Vec::new(), - })) + }))) } /// Shows a spinner while processing the inputs and input commitments if there are more than a few @@ -399,12 +396,12 @@ pub fn setup_sign_tx(req: TxMetadataReq) -> Result { tx_ctx.show_spinner(); - Ok(DataContext::TxContext(Box::new(tx_ctx), ui_new_streaming_review())) + Ok(DataContext::TxContext(tx_ctx, ui_new_streaming_review())) } fn handle_input_req( - req: TxInputReq, - mut ctx: TxParsingInputsContext, + req: Box, + mut ctx: Box, ) -> Result { let num_inputs_parsed = ctx.num_inputs_parsed; let compressed_inputs = req @@ -423,18 +420,18 @@ fn handle_input_req( } fn handle_input_commitment_req( - req: SighashInputCommitment, - mut ctx: TxParsingInputCommitmentsContext, + req: &SighashInputCommitment, + mut ctx: Box, review: &NbglStreamingReview, ) -> Result { - update_hash(&req, &mut ctx.input_commitments_hasher)?; - update_hash(&req, &mut ctx.tx_hasher)?; + update_hash(req, &mut ctx.input_commitments_hasher)?; + update_hash(req, &mut ctx.tx_hasher)?; ctx.advance_next_input_additional_info_step(review) } fn handle_output_req( - req: TxOutputReq, - mut ctx: TxParsingOutputsContext, + req: &TxOutputReq, + mut ctx: Box, review: &NbglStreamingReview, ) -> Result { if ui_streaming_review_show_output(review, &req.out, ctx.metadata.coin)? { @@ -456,10 +453,10 @@ pub fn handle_sign_tx( handle_input_req(req, ctx)? } (SignTxReq::InputCommitment(req), TxParsingContext::ParsingInputCommitments(ctx)) => { - handle_input_commitment_req(req, ctx, review)? + handle_input_commitment_req(req.as_ref(), ctx, review)? } (SignTxReq::Output(req), TxParsingContext::ParsingOutputs(ctx)) => { - handle_output_req(req, ctx, review)? + handle_output_req(req.as_ref(), ctx, review)? } (SignTxReq::NextSignature, TxParsingContext::Signing(ctx)) => { TxParsingContext::Signing(ctx) diff --git a/src/handlers/sign_tx/summary_collector.rs b/src/handlers/sign_tx/summary_collector.rs index d00826a..d39edef 100644 --- a/src/handlers/sign_tx/summary_collector.rs +++ b/src/handlers/sign_tx/summary_collector.rs @@ -38,7 +38,7 @@ pub enum TxType { Htlc, CreateDelegation, DelegationStake, - DelegationWithdrawl, + DelegationWithdrawal, CreateStakePool, DecommissionStakePool, CreateNft, @@ -212,11 +212,11 @@ impl TxSummaryCollector { self.input_command = Some(InputCommand::AccountSpending(acc.spending.clone())); match acc.spending { AccountSpending::DelegationBalance(_, amount) => { - self.tx_type = merge_tx_type(self.tx_type, TxType::DelegationWithdrawl); + self.tx_type = merge_tx_type(self.tx_type, TxType::DelegationWithdrawal); self.increase_input_totals(CoinOrTokenId::Coin, amount)?; } } - }, + } TxInputWithAdditionalInfo::AccountCommand(_, cmd) => { self.input_command = Some(InputCommand::AccountCommand(cmd.clone())); match cmd { diff --git a/src/main.rs b/src/main.rs index 4d85a09..962c253 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,10 +36,7 @@ mod errors; // Required for using String, Vec, format!... extern crate alloc; -use alloc::{ - vec::Vec, - boxed::Box -}; +use alloc::vec::Vec; use ledger_device_sdk::{ io::{ApduHeader, Comm, Reply}, @@ -47,18 +44,17 @@ use ledger_device_sdk::{ }; use app_ui::menu::ui_menu_main; +use errors::sdk_err_to_status; use handlers::{ get_public_key::handle_get_public_key, sign_message::{handle_sign_message, setup_sign_message, SignMessageContext}, - sign_tx::{setup_sign_tx, TxParsingContext}, + sign_tx::{handle_sign_tx, setup_sign_tx, TxParsingContext}, }; use messages::{ decode_all, encode, Ins, PubKeyP1, Response, SignP1, StatusWord, APDU_CLASS, MAX_ADPU_DATA_LEN, P2_DONE, P2_MORE, }; -use crate::handlers::sign_tx::handle_sign_tx; - ledger_device_sdk::set_panic!(ledger_device_sdk::exiting_panic); pub const MAX_BUFFER_LEN: usize = 4 * MAX_ADPU_DATA_LEN; @@ -94,7 +90,6 @@ impl Default for ApduTransport { } impl ApduTransport { - /// Reads the next APDU from `comm`. /// /// - If `P2 == P2_MORE`, it accumulates the data and returns `Ok(None)`. @@ -102,7 +97,7 @@ impl ApduTransport { /// - If `P2 == P2_DONE`, it finishes accumulation and returns `Ok(Some(RawInstruction))`. pub fn receive(&mut self, comm: &mut Comm) -> Result { let header: ApduHeader = comm.next_command(); - let data = comm.get_data().map_err(|_| StatusWord::WrongApduLength)?; + let data = comm.get_data().map_err(sdk_err_to_status)?; // Validation: If we are in the middle of a stream, INS and P1 must match if let (Some(curr_ins), Some(curr_p1)) = (self.current_ins, self.current_p1) { @@ -213,7 +208,7 @@ fn show_status_and_home_if_needed(cmd: &Command, ctx: &mut AppContext, status: & } pub enum DataContext { - TxContext(Box, NbglStreamingReview), + TxContext(TxParsingContext, NbglStreamingReview), SignMessageContext(SignMessageContext), } @@ -312,9 +307,9 @@ fn handle_command(cmd: &Command, ctx: &mut AppContext) -> Result { - ctx.data_context = Some(DataContext::TxContext(Box::new(new_ctx), review)); + ctx.data_context = Some(DataContext::TxContext(new_ctx, review)); Ok(response) } Err(sw) => { @@ -335,8 +330,7 @@ fn handle_command(cmd: &Command, ctx: &mut AppContext) -> Result ctx, _ => return Err(StatusWord::WrongContext), }; - let response = handle_sign_message(data, msg_ctx).map(Response::MessageSignature); - response + handle_sign_message(data, msg_ctx).map(Response::MessageSignature) } }, Command::Ping => Ok(Response::Pong), diff --git a/tests/application_client/mintlayer_command_sender.py b/tests/application_client/mintlayer_command_sender.py index e1ca862..939d5e4 100644 --- a/tests/application_client/mintlayer_command_sender.py +++ b/tests/application_client/mintlayer_command_sender.py @@ -22,6 +22,11 @@ CLA: int = 0xE1 +@dataclass +class ReviewTransaction: + transaction: Transaction + has_command_input: bool + review_custom_screen_text: str @dataclass class SignTxStep: @@ -65,8 +70,8 @@ class InsType(IntEnum): class Errors(IntEnum): SW_DENY = 0x6985 SW_CLA_NOT_SUPPORTED = 0x6E00 - SW_INS_NOT_SUPPORTED = 0x6D00 - SW_WRONG_P1P2 = 0x6B00 + SW_INS_NOT_SUPPORTED = 0x6E01 + SW_WRONG_P1P2 = 0x6E02 SW_WRONG_APDU_LENGTH = 0x6E03 SW_WRONG_RESPONSE_LENGTH = 0xB000 @@ -137,11 +142,19 @@ def sign_message( for chunk in chunks[:-1]: self.backend.exchange( - cla=CLA, ins=InsType.SIGN_MESSAGE, p1=SignMessageP1.P1_NEXT, p2=P2.P2_MORE, data=chunk + cla=CLA, + ins=InsType.SIGN_MESSAGE, + p1=SignMessageP1.P1_NEXT, + p2=P2.P2_MORE, + data=chunk ) with self.backend.exchange_async( - cla=CLA, ins=InsType.SIGN_MESSAGE, p1=SignMessageP1.P1_NEXT, p2=P2.P2_LAST, data=chunks[-1] + cla=CLA, + ins=InsType.SIGN_MESSAGE, + p1=SignMessageP1.P1_NEXT, + p2=P2.P2_LAST, + data=chunks[-1] ) as response: yield response @@ -202,7 +215,7 @@ def sign_tx(self, transaction: Transaction) -> Generator[SignTxStep, None, None] ): kind = "start" yield SignTxStep(kind=kind, index=0) - + # ---- OUTPUTS ---- print("streaming outputs") @@ -301,7 +314,17 @@ def pack_derivation_path(derivation_path: str) -> bytes: return path_obj.encode(path).data -def sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input, review_custom_screen_text): +def sign_tx_review( + client, + device, + navigator, + scenario_navigator, + review_transaction: ReviewTransaction, +): + transaction = review_transaction.transaction + has_command_input = review_transaction.has_command_input + review_custom_screen_text = review_transaction.review_custom_screen_text + start_idx = 0 if not device.is_nano: instruction = NavInsID.SWIPE_CENTER_TO_LEFT @@ -370,7 +393,11 @@ def sign_tx_review(client, device, navigator, scenario_navigator, transaction, h start_idx += 10 elif step.kind == "final": - scenario = NavigationScenarioData(scenario_navigator.device, scenario_navigator.backend, UseCase.TX_REVIEW, True) + scenario = NavigationScenarioData( + scenario_navigator.device, + scenario_navigator.backend, + UseCase.TX_REVIEW, + True) navigator.navigate_until_text_and_compare( navigate_instruction=scenario.navigation, validation_instructions=scenario.validation, @@ -386,4 +413,4 @@ def sign_tx_review(client, device, navigator, scenario_navigator, transaction, h assert len(responses) == len(transaction.inputs) for response in responses: - assert len(response) == TX_RESPONSE_SIZE \ No newline at end of file + assert len(response) == TX_RESPONSE_SIZE diff --git a/tests/application_client/mintlayer_response_unpacker.py b/tests/application_client/mintlayer_response_unpacker.py index 42ad63a..edb28d4 100644 --- a/tests/application_client/mintlayer_response_unpacker.py +++ b/tests/application_client/mintlayer_response_unpacker.py @@ -51,12 +51,7 @@ def unpack_get_app_and_version_response(response: bytes) -> Tuple[str, str]: # Unpack from response: -# response = pub_key_len (1) -# pub_key (var) -# chain_code_len (1) -# chain_code (var) def unpack_get_public_key_response(response: bytes) -> Tuple[int, bytes, int, bytes]: - print("response bytes: ", len(response)) response_bytes = scalecodec.base.ScaleBytes(response) response_obj = scalecodec.base.RuntimeConfiguration().create_scale_object( "Response", data=response_bytes @@ -79,24 +74,13 @@ def unpack_get_public_key_response(response: bytes) -> Tuple[int, bytes, int, by # Unpack from response: -# response = sig_len (1) -# sig (var) -def unpack_sign_message_response(response: bytes) -> Tuple[int, bytes]: - response, sig_len, sig = pop_size_prefixed_buf_from_buf(response) - - assert sig_len == 64 - assert len(response) == 0 - return sig_len, sig - - -# Unpack from response: -# response = der_sig_len (1) -# der_sig (var) -# v (1) -def unpack_sign_tx_response(response: bytes) -> Tuple[int, bytes, int]: - response, der_sig_len, der_sig = pop_size_prefixed_buf_from_buf(response) - response, v = pop_sized_buf_from_buffer(response, 1) - - assert len(response) == 0 - - return der_sig_len, der_sig, int.from_bytes(v, byteorder="big") +def unpack_sign_message_response(response: bytes) -> bytes: + response_bytes = scalecodec.base.ScaleBytes(response) + response_obj = scalecodec.base.RuntimeConfiguration().create_scale_object( + "Response", data=response_bytes + ) + resp = response_obj.decode() + assert resp["MessageSignature"] is not None + signature = bytes.fromhex(resp["MessageSignature"]["signature"][2:]) + assert len(signature) == 64 + return signature diff --git a/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00010.png b/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00010.png index 8d17b0f..49bf43a 100644 Binary files a/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00010.png and b/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00010.png differ diff --git a/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00011.png b/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00011.png index 8d17b0f..49bf43a 100644 Binary files a/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00011.png and b/tests/snapshots/apex_p/test_sign_tx_lock_then_transfer/00011.png differ diff --git a/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00010.png b/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00010.png index bb4b77a..53b5831 100644 Binary files a/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00010.png and b/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00010.png differ diff --git a/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00011.png b/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00011.png index bb4b77a..53b5831 100644 Binary files a/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00011.png and b/tests/snapshots/flex/test_sign_tx_lock_then_transfer/00011.png differ diff --git a/tests/snapshots/nanox/test_app_mainmenu/00002.png b/tests/snapshots/nanox/test_app_mainmenu/00002.png index 77bcafd..f265d69 100644 Binary files a/tests/snapshots/nanox/test_app_mainmenu/00002.png and b/tests/snapshots/nanox/test_app_mainmenu/00002.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00010.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00010.png new file mode 100644 index 0000000..c408134 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00011.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00011.png new file mode 100644 index 0000000..fc6fca6 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00012.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00012.png new file mode 100644 index 0000000..e2577f8 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00013.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00013.png new file mode 100644 index 0000000..aa75038 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00020.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00021.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00022.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00022.png new file mode 100644 index 0000000..31b2df9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00023.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00023.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00024.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00024.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_authority/00025.png b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00025.png new file mode 100644 index 0000000..c81329e Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_authority/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00010.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00010.png new file mode 100644 index 0000000..de18f19 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00011.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00011.png new file mode 100644 index 0000000..39359b8 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00012.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00012.png new file mode 100644 index 0000000..c335313 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00020.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00021.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00022.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00022.png new file mode 100644 index 0000000..31b2df9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00023.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00023.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00024.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00024.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00025.png b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00025.png new file mode 100644 index 0000000..d3f5cd6 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_change_token_metadata_uri/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_delegation/00010.png b/tests/snapshots/nanox/test_sign_tx_create_delegation/00010.png new file mode 100644 index 0000000..7c23f06 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_delegation/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_delegation/00011.png b/tests/snapshots/nanox/test_sign_tx_create_delegation/00011.png new file mode 100644 index 0000000..59d0e80 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_delegation/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_delegation/00012.png b/tests/snapshots/nanox/test_sign_tx_create_delegation/00012.png new file mode 100644 index 0000000..3d01046 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_delegation/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_delegation/00013.png b/tests/snapshots/nanox/test_sign_tx_create_delegation/00013.png new file mode 100644 index 0000000..f62cce2 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_delegation/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_delegation/00014.png b/tests/snapshots/nanox/test_sign_tx_create_delegation/00014.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_delegation/00014.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_delegation/00015.png b/tests/snapshots/nanox/test_sign_tx_create_delegation/00015.png new file mode 100644 index 0000000..0f6ca54 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_delegation/00015.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_delegation/00016.png b/tests/snapshots/nanox/test_sign_tx_create_delegation/00016.png new file mode 100644 index 0000000..17cf916 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_delegation/00016.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00010.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00010.png index 06704db..139058c 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00010.png and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00011.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00011.png index 2737bf9..dc3f263 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00011.png and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00012.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00012.png index 17ff048..dd49ec2 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00012.png and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00013.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00013.png index 3a16119..7623766 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00013.png and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00014.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00014.png new file mode 100644 index 0000000..0562b8b Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00014.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00015.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00015.png new file mode 100644 index 0000000..9880fbf Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00015.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00016.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00016.png new file mode 100644 index 0000000..5d19c53 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00016.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00017.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00017.png new file mode 100644 index 0000000..7184c47 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00017.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00018.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00018.png new file mode 100644 index 0000000..f278bff Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00018.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00019.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00019.png new file mode 100644 index 0000000..06704db Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00019.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00020.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00021.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00021.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00022.png b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00022.png new file mode 100644 index 0000000..b3afad9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_create_stake_pool/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_delegation_staking/00010.png b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00010.png new file mode 100644 index 0000000..15001c0 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_delegation_staking/00011.png b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00011.png new file mode 100644 index 0000000..52979b5 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_delegation_staking/00012.png b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00012.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_delegation_staking/00013.png b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00013.png new file mode 100644 index 0000000..0623b1b Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_delegation_staking/00014.png b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00014.png new file mode 100644 index 0000000..c6836c8 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_delegation_staking/00014.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00010.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00010.png new file mode 100644 index 0000000..eaa64e5 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00011.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00011.png new file mode 100644 index 0000000..351a884 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00020.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00021.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00022.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00022.png new file mode 100644 index 0000000..31b2df9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00023.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00023.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00024.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00024.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00025.png b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00025.png new file mode 100644 index 0000000..567675f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_freeze_tokens/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00010.png b/tests/snapshots/nanox/test_sign_tx_htlc/00010.png index b168952..40b1181 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_htlc/00010.png and b/tests/snapshots/nanox/test_sign_tx_htlc/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00011.png b/tests/snapshots/nanox/test_sign_tx_htlc/00011.png index 3a16119..f113d41 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_htlc/00011.png and b/tests/snapshots/nanox/test_sign_tx_htlc/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00012.png b/tests/snapshots/nanox/test_sign_tx_htlc/00012.png new file mode 100644 index 0000000..195e6f3 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00013.png b/tests/snapshots/nanox/test_sign_tx_htlc/00013.png new file mode 100644 index 0000000..778f66f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00014.png b/tests/snapshots/nanox/test_sign_tx_htlc/00014.png new file mode 100644 index 0000000..0d5d509 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00014.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00015.png b/tests/snapshots/nanox/test_sign_tx_htlc/00015.png new file mode 100644 index 0000000..5fc12d1 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00015.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00020.png b/tests/snapshots/nanox/test_sign_tx_htlc/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00021.png b/tests/snapshots/nanox/test_sign_tx_htlc/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00022.png b/tests/snapshots/nanox/test_sign_tx_htlc/00022.png new file mode 100644 index 0000000..62b7685 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00023.png b/tests/snapshots/nanox/test_sign_tx_htlc/00023.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00024.png b/tests/snapshots/nanox/test_sign_tx_htlc/00024.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_htlc/00025.png b/tests/snapshots/nanox/test_sign_tx_htlc/00025.png new file mode 100644 index 0000000..32f349e Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_htlc/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00010.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00010.png new file mode 100644 index 0000000..7c86f79 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00011.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00011.png new file mode 100644 index 0000000..7f8fb9a Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00012.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00012.png new file mode 100644 index 0000000..7cd6829 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00013.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00013.png new file mode 100644 index 0000000..6d1bc9a Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00014.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00014.png new file mode 100644 index 0000000..4c43c01 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00014.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00015.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00015.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00015.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00016.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00016.png new file mode 100644 index 0000000..0f6ca54 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00016.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00017.png b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00017.png new file mode 100644 index 0000000..caaaca0 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_fungible_token/00017.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00010.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00010.png index af149c9..84ff3f7 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_issue_nft/00010.png and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00011.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00011.png index 4336cee..3fdec7f 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_issue_nft/00011.png and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00012.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00012.png index 3a16119..a9bd3e2 100644 Binary files a/tests/snapshots/nanox/test_sign_tx_issue_nft/00012.png and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00013.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00013.png new file mode 100644 index 0000000..b9a3aba Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00014.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00014.png new file mode 100644 index 0000000..b69697c Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00014.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00015.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00015.png new file mode 100644 index 0000000..651a3f4 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00015.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00016.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00016.png new file mode 100644 index 0000000..19e1140 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00016.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00017.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00017.png new file mode 100644 index 0000000..95bb380 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00017.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00018.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00018.png new file mode 100644 index 0000000..4cf446c Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00018.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00019.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00019.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00019.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00020.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00020.png new file mode 100644 index 0000000..af149c9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_issue_nft/00021.png b/tests/snapshots/nanox/test_sign_tx_issue_nft/00021.png new file mode 100644 index 0000000..8a6f6ed Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_issue_nft/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00010.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00010.png new file mode 100644 index 0000000..ac31f5f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00011.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00011.png new file mode 100644 index 0000000..b0f6c80 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00012.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00012.png new file mode 100644 index 0000000..eb0ade6 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00020.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00021.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00021.png new file mode 100644 index 0000000..7a9b805 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00022.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00022.png new file mode 100644 index 0000000..342974f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00023.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00023.png new file mode 100644 index 0000000..a8a6913 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00024.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00024.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00025.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00025.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00026.png b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00026.png new file mode 100644 index 0000000..b00f750 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_lock_then_transfer/00026.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00010.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00010.png new file mode 100644 index 0000000..05bd21a Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00011.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00011.png new file mode 100644 index 0000000..50fb1e2 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00012.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00012.png new file mode 100644 index 0000000..51c42bd Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00020.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00021.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00021.png new file mode 100644 index 0000000..ec1e8cb Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00022.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00022.png new file mode 100644 index 0000000..5d5329a Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00023.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00023.png new file mode 100644 index 0000000..f12db18 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00024.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00024.png new file mode 100644 index 0000000..2b9bccd Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00025.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00025.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00026.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00026.png new file mode 100644 index 0000000..eeaad30 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00026.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_mint_tokens/00027.png b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00027.png new file mode 100644 index 0000000..f2eaa31 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_mint_tokens/00027.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00010.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00010.png new file mode 100644 index 0000000..4738c2b Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00011.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00011.png new file mode 100644 index 0000000..d18d495 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00020.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00021.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00022.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00022.png new file mode 100644 index 0000000..b71b25b Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00030.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00030.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00030.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00031.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00031.png new file mode 100644 index 0000000..ec1e8cb Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00031.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00032.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00032.png new file mode 100644 index 0000000..5d5329a Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00032.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00033.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00033.png new file mode 100644 index 0000000..f12db18 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00033.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00034.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00034.png new file mode 100644 index 0000000..58eac55 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00034.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00035.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00035.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00035.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00036.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00036.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00036.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_conclude/00037.png b/tests/snapshots/nanox/test_sign_tx_order_conclude/00037.png new file mode 100644 index 0000000..1611a57 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_conclude/00037.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00010.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00010.png new file mode 100644 index 0000000..a6a6827 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00011.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00011.png new file mode 100644 index 0000000..315c395 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00012.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00012.png new file mode 100644 index 0000000..f766f97 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00020.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00021.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00022.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00022.png new file mode 100644 index 0000000..62b7685 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00030.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00030.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00030.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00031.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00031.png new file mode 100644 index 0000000..ec1e8cb Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00031.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00032.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00032.png new file mode 100644 index 0000000..5d5329a Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00032.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00033.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00033.png new file mode 100644 index 0000000..f12db18 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00033.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00034.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00034.png new file mode 100644 index 0000000..6cf46ea Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00034.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00035.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00035.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00035.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00036.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00036.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00036.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_order_fill/00037.png b/tests/snapshots/nanox/test_sign_tx_order_fill/00037.png new file mode 100644 index 0000000..6e341c1 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_order_fill/00037.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_transfer/00010.png b/tests/snapshots/nanox/test_sign_tx_transfer/00010.png new file mode 100644 index 0000000..e2e6efc Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_transfer/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_transfer/00011.png b/tests/snapshots/nanox/test_sign_tx_transfer/00011.png new file mode 100644 index 0000000..75337cb Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_transfer/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_transfer/00012.png b/tests/snapshots/nanox/test_sign_tx_transfer/00012.png new file mode 100644 index 0000000..0378fc6 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_transfer/00012.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_transfer/00013.png b/tests/snapshots/nanox/test_sign_tx_transfer/00013.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_transfer/00013.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_transfer/00014.png b/tests/snapshots/nanox/test_sign_tx_transfer/00014.png new file mode 100644 index 0000000..639af51 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_transfer/00014.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_transfer/00015.png b/tests/snapshots/nanox/test_sign_tx_transfer/00015.png new file mode 100644 index 0000000..7898c99 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_transfer/00015.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00010.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00010.png new file mode 100644 index 0000000..6336f24 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00011.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00011.png new file mode 100644 index 0000000..1853ea2 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00020.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00021.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00022.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00022.png new file mode 100644 index 0000000..31b2df9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00023.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00023.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00024.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00024.png new file mode 100644 index 0000000..2737bf9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00025.png b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00025.png new file mode 100644 index 0000000..ddae9bc Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unfreeze_tokens/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00010.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00010.png new file mode 100644 index 0000000..57c605e Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00010.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00011.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00011.png new file mode 100644 index 0000000..129fb85 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00011.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00020.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00020.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00020.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00021.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00021.png new file mode 100644 index 0000000..f8e1b29 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00021.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00022.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00022.png new file mode 100644 index 0000000..31b2df9 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00022.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00023.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00023.png new file mode 100644 index 0000000..11e1d3f Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00023.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00024.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00024.png new file mode 100644 index 0000000..8973d80 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00024.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00025.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00025.png new file mode 100644 index 0000000..8ed052d Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00025.png differ diff --git a/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00026.png b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00026.png new file mode 100644 index 0000000..39ef4a2 Binary files /dev/null and b/tests/snapshots/nanox/test_sign_tx_unmint_tokens/00026.png differ diff --git a/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00010.png b/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00010.png index 3b07cf0..9f3c01a 100644 Binary files a/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00010.png and b/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00010.png differ diff --git a/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00011.png b/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00011.png index 3b07cf0..9f3c01a 100644 Binary files a/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00011.png and b/tests/snapshots/stax/test_sign_tx_lock_then_transfer/00011.png differ diff --git a/tests/test_app_mainmenu.py b/tests/test_app_mainmenu.py index bfc8f09..a55bdc3 100644 --- a/tests/test_app_mainmenu.py +++ b/tests/test_app_mainmenu.py @@ -7,8 +7,13 @@ def test_app_mainmenu(device, navigator, test_name): # Navigate in the main menu if device.is_nano: - instructions = [NavInsID.RIGHT_CLICK] + instructions = [ + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK + ] else: - instructions = [NavInsID.USE_CASE_HOME_SETTINGS] + instructions = [ + NavInsID.USE_CASE_HOME_SETTINGS, + ] navigator.navigate_and_compare(ROOT_SCREENSHOT_PATH, test_name, instructions, screen_change_before_first_instruction=False) diff --git a/tests/test_sign_cmd.py b/tests/test_sign_cmd.py index 34adc6c..5bf93c0 100644 --- a/tests/test_sign_cmd.py +++ b/tests/test_sign_cmd.py @@ -3,7 +3,11 @@ from ragger.navigator import NavIns, NavInsID from application_client import MAINNET -from application_client.mintlayer_command_sender import MintlayerCommandSender, sign_tx_review +from application_client.mintlayer_command_sender import ( + MintlayerCommandSender, + sign_tx_review, + ReviewTransaction, +) from application_client.mintlayer_response_unpacker import unpack_get_public_key_response from application_client.mintlayer_transaction import Transaction @@ -86,7 +90,12 @@ def test_sign_tx_transfer(backend, scenario_navigator, device, navigator): coin=MAINNET, inputs=[inp], input_commitments=[inp_commitment], outputs=[output] ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=False, review_custom_screen_text=r"Sign\stransfer") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=False, + review_custom_screen_text=r"Sign\stransfer" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_lock_then_transfer(backend, scenario_navigator, device, navigator): @@ -142,7 +151,12 @@ def test_sign_tx_lock_then_transfer(backend, scenario_navigator, device, navigat coin=MAINNET, inputs=[inp], input_commitments=[inp_commitment], outputs=[output] ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\swithdrawal") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\swithdrawal" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_create_delegation(backend, scenario_navigator, device, navigator): @@ -212,7 +226,12 @@ def test_sign_tx_create_delegation(backend, scenario_navigator, device, navigato coin=MAINNET, inputs=[inp], input_commitments=[inp_commitment], outputs=[output] ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=False, review_custom_screen_text=r"Sign\screate") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=False, + review_custom_screen_text=r"Sign\screate" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_delegation_staking(backend, scenario_navigator, device, navigator): @@ -275,7 +294,12 @@ def test_sign_tx_delegation_staking(backend, scenario_navigator, device, navigat coin=MAINNET, inputs=[inp], input_commitments=[inp_commitment], outputs=[output] ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=False, review_custom_screen_text=r"Sign\sstake") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=False, + review_custom_screen_text=r"Sign\sstake" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_create_stake_pool(backend, scenario_navigator, device, navigator): @@ -359,7 +383,12 @@ def test_sign_tx_create_stake_pool(backend, scenario_navigator, device, navigato coin=MAINNET, inputs=[inp], input_commitments=[inp_commitment], outputs=[output] ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=False, review_custom_screen_text=r"Sign\screate\sstake") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=False, + review_custom_screen_text=r"Sign\screate\sstake" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_issue_fungible_token(backend, scenario_navigator, device, navigator): @@ -436,7 +465,12 @@ def test_sign_tx_issue_fungible_token(backend, scenario_navigator, device, navig coin=MAINNET, inputs=[inp], input_commitments=[inp_commitment], outputs=[output] ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=False, review_custom_screen_text=r"Sign\screate\stoken") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=False, + review_custom_screen_text=r"Sign\screate\stoken" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_issue_nft(backend, scenario_navigator, device, navigator): @@ -529,7 +563,12 @@ def test_sign_tx_issue_nft(backend, scenario_navigator, device, navigator): coin=MAINNET, inputs=[inp], input_commitments=[inp_commitment], outputs=[output] ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=False, review_custom_screen_text=r"Sign\screate\sNFT") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=False, + review_custom_screen_text=r"Sign\screate\sNFT" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_mint_tokens(backend, scenario_navigator, device, navigator): @@ -632,7 +671,12 @@ def test_sign_tx_mint_tokens(backend, scenario_navigator, device, navigator): outputs=[mint_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\smint\stokens") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\smint\stokens" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_unmint_tokens(backend, scenario_navigator, device, navigator): @@ -769,7 +813,12 @@ def test_sign_tx_unmint_tokens(backend, scenario_navigator, device, navigator): outputs=[change_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\sunmint\stokens") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\sunmint\stokens" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_freeze_tokens(backend, scenario_navigator, device, navigator): @@ -868,7 +917,12 @@ def test_sign_tx_freeze_tokens(backend, scenario_navigator, device, navigator): outputs=[change_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\sfreeze\stokens") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\sfreeze\stokens" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_unfreeze_tokens(backend, scenario_navigator, device, navigator): @@ -967,7 +1021,12 @@ def test_sign_tx_unfreeze_tokens(backend, scenario_navigator, device, navigator) outputs=[change_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\sunfreeze") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\sunfreeze" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_change_token_authority(backend, scenario_navigator, device, navigator): @@ -1075,7 +1134,12 @@ def test_sign_tx_change_token_authority(backend, scenario_navigator, device, nav outputs=[change_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\schange\stoken") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\schange\stoken" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_change_token_metadata_uri( @@ -1180,7 +1244,12 @@ def test_sign_tx_change_token_metadata_uri( outputs=[change_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\schange\stoken") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\schange\stoken" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_order_fill(backend, scenario_navigator, device, navigator): @@ -1321,7 +1390,12 @@ def test_sign_tx_order_fill(backend, scenario_navigator, device, navigator): outputs=[change_output, fill_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\sfill\sorder") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\sfill\sorder" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_order_conclude(backend, scenario_navigator, device, navigator): @@ -1457,7 +1531,12 @@ def test_sign_tx_order_conclude(backend, scenario_navigator, device, navigator): outputs=[change_output, conclude_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=True, review_custom_screen_text=r"Sign\sconclude\sorder") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=True, + review_custom_screen_text=r"Sign\sconclude\sorder" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) def test_sign_tx_htlc(backend, scenario_navigator, device, navigator): @@ -1563,4 +1642,9 @@ def test_sign_tx_htlc(backend, scenario_navigator, device, navigator): outputs=[htlc_output, change_output], ) - sign_tx_review(client, device, navigator, scenario_navigator, transaction, has_command_input=False, review_custom_screen_text=r"Sign\screate\sHTLC") + review_tx = ReviewTransaction( + transaction=transaction, + has_command_input=False, + review_custom_screen_text=r"Sign\screate\sHTLC" + ) + sign_tx_review(client, device, navigator, scenario_navigator, review_tx) diff --git a/tests/test_sign_message.py b/tests/test_sign_message.py index f14ae97..16d8406 100644 --- a/tests/test_sign_message.py +++ b/tests/test_sign_message.py @@ -1,10 +1,12 @@ import pytest -import scalecodec # type: ignore from ragger.error import ExceptionRAPDU from application_client import MAINNET from application_client.mintlayer_command_sender import ( Errors, MintlayerCommandSender) +from application_client.mintlayer_response_unpacker import ( + unpack_sign_message_response, +) # In this test we check that the message signing works @@ -15,10 +17,8 @@ def test_sign_message(backend, scenario_navigator): with client.sign_message(coin=MAINNET, addr_type=0, path=path, message=message): scenario_navigator.review_approve() - response = scalecodec.base.ScaleBytes(client.get_async_response().data) - response_obj = scalecodec.base.RuntimeConfiguration().create_scale_object("Response", data=response) - response = response_obj.decode() - assert response["MessageSignature"] is not None + sig = unpack_sign_message_response(client.get_async_response().data) + assert len(sig) == 64 def test_sign_message_pkh(backend, scenario_navigator): path = "m/44'/19788'/0'/0/0" @@ -27,10 +27,8 @@ def test_sign_message_pkh(backend, scenario_navigator): with client.sign_message(coin=MAINNET, addr_type=1, path=path, message=message): scenario_navigator.review_approve() - response = scalecodec.base.ScaleBytes(client.get_async_response().data) - response_obj = scalecodec.base.RuntimeConfiguration().create_scale_object("Response", data=response) - response = response_obj.decode() - assert response["MessageSignature"] is not None + sig = unpack_sign_message_response(client.get_async_response().data) + assert len(sig) == 64 # Message signing refused test