From 3ffd4d241552fc041abc1b861143f5c0b72d89b1 Mon Sep 17 00:00:00 2001 From: Mykhailo Kremniov Date: Tue, 15 Jul 2025 20:59:58 +0300 Subject: [PATCH 1/3] Fix Mintlayer repo CI --- .github/workflows/core.yml | 11 +- .github/workflows/prebuild.yml | 6 +- core/SConscript.firmware | 4 +- core/embed/rust/Cargo.toml | 1 + .../rust/src/mintlayer/input_commitments.rs | 4 +- core/embed/rust/src/mintlayer/mod.rs | 87 ++++--- .../modtrezormintlayer/modtrezormintlayer.c | 4 +- core/embed/upymod/modtrezormintlayer/utils.c | 24 +- tests/device_tests/mintlayer/__init__.py | 12 + .../mintlayer/test_get_address.py | 12 +- .../mintlayer/test_get_public_key.py | 11 +- .../mintlayer/test_sign_message.py | 12 +- tests/device_tests/mintlayer/test_sign_tx.py | 29 +-- tests/ui_tests/fixtures.json | 216 ++++++++++++++++++ 14 files changed, 327 insertions(+), 106 deletions(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index dbf4375d63..38b5d997e2 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -755,7 +755,8 @@ jobs: core_ui_comment: name: Post comment with UI diff URLs - if: github.event_name == 'pull_request' + # if: github.event_name == 'pull_request' + if: false # Disabled for Mintlayer repository runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -776,7 +777,8 @@ jobs: core_upload_emu: name: Upload emulator binaries - if: github.event_name == 'schedule' + # if: github.event_name == 'schedule' + if: false # Disabled for Mintlayer repository runs-on: ubuntu-latest needs: - core_emu @@ -798,8 +800,9 @@ jobs: core_upload_emu_branch: name: Upload emulator binaries for the current branch - # Not building it for nightly CI - if: github.event_name != 'schedule' + # # Not building it for nightly CI + # if: github.event_name != 'schedule' + if: false # Disabled for Mintlayer repository runs-on: ubuntu-latest needs: # Do not include ARM, they are only built on nightly diff --git a/.github/workflows/prebuild.yml b/.github/workflows/prebuild.yml index 952d3db41d..e0a863d16b 100644 --- a/.github/workflows/prebuild.yml +++ b/.github/workflows/prebuild.yml @@ -73,7 +73,8 @@ jobs: # or contain `[no changelog]` in the commit message. changelog_check: name: Changelog check - if: ${{ github.ref != 'main' && github.event_name == 'pull_request' }} + # if: ${{ github.ref != 'main' && github.event_name == 'pull_request' }} + if: false # Disabled for Mintlayer repository runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -97,7 +98,8 @@ jobs: # Warn if core/embed/rust/Cargo.lock changed cargolock_check: name: Cargo.lock check - if: ${{ github.ref != 'main' && github.event_name == 'pull_request' }} + # if: ${{ github.ref != 'main' && github.event_name == 'pull_request' }} + if: false # Disabled for Mintlayer repository runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 diff --git a/core/SConscript.firmware b/core/SConscript.firmware index 60b9b6659f..7a61cc5853 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -502,7 +502,9 @@ env.Replace( ASPPFLAGS='$CFLAGS $CCFLAGS', ) -BYTECODE_OPTIMIZATION = {'0': '0', '1': '3'}[PYOPT] +# Mintlayer: the optimization level for the PYOPT=0 case was upped to 1, because otherwise some debuglink-enabled +# builds would fail due to flash overflow (e.g. it was the case for T3T1, where the overflow was about 3k bytes). +BYTECODE_OPTIMIZATION = {'0': '1', '1': '3'}[PYOPT] env.Replace( HEADERTOOL='headertool', diff --git a/core/embed/rust/Cargo.toml b/core/embed/rust/Cargo.toml index 47487c34f3..7eb8cf8391 100644 --- a/core/embed/rust/Cargo.toml +++ b/core/embed/rust/Cargo.toml @@ -60,6 +60,7 @@ test = [ "debug", "glob", "micropython", + "mintlayer", "nrf", "optiga", "protobuf", diff --git a/core/embed/rust/src/mintlayer/input_commitments.rs b/core/embed/rust/src/mintlayer/input_commitments.rs index afedf8ff57..cd9558e079 100644 --- a/core/embed/rust/src/mintlayer/input_commitments.rs +++ b/core/embed/rust/src/mintlayer/input_commitments.rs @@ -76,8 +76,8 @@ fn mintlayer_encode_input_commitment_v1_for_produce_block_from_stake_utxo_impl( ) -> Result { let utxo = TxOutput::decode_all(&mut &encoded_utxo[..]) .map_err(|_| MintlayerErrorCode::InvalidEncodedUtxo)?; - let staker_balance = Amount::from_bytes_be(staker_balance_amount.as_ref()) - .ok_or(MintlayerErrorCode::InvalidAmount)?; + let staker_balance = + Amount::from_bytes_be(staker_balance_amount).ok_or(MintlayerErrorCode::InvalidAmount)?; Ok(SighashInputCommitment::ProduceBlockFromStakeUtxo { utxo, diff --git a/core/embed/rust/src/mintlayer/mod.rs b/core/embed/rust/src/mintlayer/mod.rs index b1dd078795..8f9b8c0063 100644 --- a/core/embed/rust/src/mintlayer/mod.rs +++ b/core/embed/rust/src/mintlayer/mod.rs @@ -1,9 +1,3 @@ -use crate::micropython::ffi; -use core::{ - alloc::{GlobalAlloc, Layout}, - ptr::null_mut, -}; - use ml_common::{ AccountCommand, AccountCommandTag, AccountOutPoint, AccountSpending, Amount, Destination, HashedTimelockContract, HtlcSecretHash, IsTokenFreezable, IsTokenUnfreezable, Metadata, @@ -158,13 +152,13 @@ fn mintlayer_encode_token_account_command_input_impl( AccountCommandTag::UnmintTokens => AccountCommand::UnmintTokens(token_id), AccountCommandTag::LockTokenSupply => AccountCommand::LockTokenSupply(token_id), AccountCommandTag::FreezeToken => { - let is_token_unfreezabe = IsTokenUnfreezable::decode_all(&mut data.as_ref()) + let is_token_unfreezabe = IsTokenUnfreezable::decode_all(&mut &*data) .map_err(|_| MintlayerErrorCode::InvalidIsTokenUnfreezable)?; AccountCommand::FreezeToken(token_id, is_token_unfreezabe) } AccountCommandTag::UnfreezeToken => AccountCommand::UnfreezeToken(token_id), AccountCommandTag::ChangeTokenAuthority => { - let destination = Destination::decode_all(&mut data.as_ref()) + let destination = Destination::decode_all(&mut &*data) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; AccountCommand::ChangeTokenAuthority(token_id, destination) } @@ -273,7 +267,7 @@ fn mintlayer_encode_fill_order_account_command_input_impl( ); let amount = parse_amount(coin_amount)?; - let destination = Destination::decode_all(&mut destination_bytes.as_ref()) + let destination = Destination::decode_all(&mut &*destination_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; let account_command = AccountCommand::FillOrder(order_id, amount, destination); let tx_input = TxInput::AccountCommand(nonce, account_command); @@ -316,7 +310,7 @@ fn mintlayer_encode_fill_order_v1_order_command_input_impl( ); let amount = parse_amount(coin_amount)?; - let destination = Destination::decode_all(&mut destination_bytes.as_ref()) + let destination = Destination::decode_all(&mut &*destination_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; let order_command = OrderAccountCommand::FillOrder(order_id, amount, destination); let tx_input = TxInput::OrderAccountCommand(order_command); @@ -379,7 +373,7 @@ extern "C" fn mintlayer_encode_transfer_output( let destination_bytes = unsafe { core::slice::from_raw_parts(destination_data, destination_data_len as usize) }; - let destination = match Destination::decode_all(&mut destination_bytes.as_ref()) { + let destination = match Destination::decode_all(&mut &*destination_bytes) { Ok(destination) => destination, Err(_) => return MintlayerErrorCode::InvalidDestination.into(), }; @@ -412,7 +406,7 @@ extern "C" fn mintlayer_encode_lock_then_transfer_output( let destination_bytes = unsafe { core::slice::from_raw_parts(destination_data, destination_data_len as usize) }; - let destination = match Destination::decode_all(&mut destination_bytes.as_ref()) { + let destination = match Destination::decode_all(&mut &*destination_bytes) { Ok(destination) => destination, Err(_) => return MintlayerErrorCode::InvalidDestination.into(), }; @@ -520,11 +514,11 @@ fn mintlayer_encode_create_stake_pool_output_impl( .map_err(|_| MintlayerErrorCode::WrongHashSize)?, ); let pledge = parse_amount(pledge_coin_amount)?; - let staker = Destination::decode_all(&mut staker_destination_bytes.as_ref()) + let staker = Destination::decode_all(&mut &*staker_destination_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; - let vrf_public_key = VRFPublicKeyHolder::decode_all(&mut vrf_public_key.as_ref()) + let vrf_public_key = VRFPublicKeyHolder::decode_all(&mut &*vrf_public_key) .map_err(|_| MintlayerErrorCode::InvalidVrfPublicKey)?; - let decommission_key = Destination::decode_all(&mut decommission_destination_bytes.as_ref()) + let decommission_key = Destination::decode_all(&mut &*decommission_destination_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; let cost_per_block = parse_amount(cost_per_block_coin_amount)?; let txo = TxOutput::CreateStakePool( @@ -556,7 +550,7 @@ extern "C" fn mintlayer_encode_produce_from_stake_output( let destination_bytes = unsafe { core::slice::from_raw_parts(destination_data, destination_data_len as usize) }; - let destination = match Destination::decode_all(&mut destination_bytes.as_ref()) { + let destination = match Destination::decode_all(&mut &*destination_bytes) { Ok(destination) => destination, Err(_) => return MintlayerErrorCode::InvalidDestination.into(), }; @@ -581,7 +575,7 @@ extern "C" fn mintlayer_encode_create_delegation_id_output( let destination_bytes = unsafe { core::slice::from_raw_parts(destination_data, destination_data_len as usize) }; - let destination = match Destination::decode_all(&mut destination_bytes.as_ref()) { + let destination = match Destination::decode_all(&mut &*destination_bytes) { Ok(destination) => destination, Err(_) => return MintlayerErrorCode::InvalidDestination.into(), }; @@ -663,7 +657,7 @@ fn mintlayer_encode_issue_fungible_token_output_impl( ) -> Result { let token_ticker = token_ticker.to_vec(); let metadata_uri = metadata_uri.to_vec(); - let authority = Destination::decode_all(&mut authority_bytes.as_ref()) + let authority = Destination::decode_all(&mut &*authority_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; let is_freezable = IsTokenFreezable::from_u8(is_freezable) .ok_or(MintlayerErrorCode::InvalidIsTokenFreezable)?; @@ -751,6 +745,7 @@ extern "C" fn mintlayer_encode_issue_nft_output( handle_err_or_encode(res) } +#[allow(clippy::too_many_arguments)] fn mintlayer_encode_issue_nft_output_impl( token_id: &[u8], creator_data_len: u32, @@ -785,7 +780,7 @@ fn mintlayer_encode_issue_nft_output_impl( let additional_metadata_uri = additional_metadata_uri.to_vec(); let media_uri = media_uri.to_vec(); let media_hash = media_hash.to_vec(); - let destination = Destination::decode_all(&mut destination_bytes.as_ref()) + let destination = Destination::decode_all(&mut &*destination_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; let issuance = NftIssuance::V0(NftIssuanceV0 { metadata: Metadata { @@ -873,9 +868,9 @@ fn mintlayer_encode_htlc_output_impl( lock_amount: u64, value: OutputValue, ) -> Result { - let refund_key = Destination::decode_all(&mut refund_destination_bytes.as_ref()) + let refund_key = Destination::decode_all(&mut &*refund_destination_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; - let spend_key = Destination::decode_all(&mut spend_destination_bytes.as_ref()) + let spend_key = Destination::decode_all(&mut &*spend_destination_bytes) .map_err(|_| MintlayerErrorCode::InvalidDestination)?; let secret_hash = HtlcSecretHash( hash.try_into() @@ -936,7 +931,7 @@ extern "C" fn mintlayer_encode_create_order_output( let destination_bytes = unsafe { core::slice::from_raw_parts(destination_data, destination_data_len as usize) }; - let destination = match Destination::decode_all(&mut destination_bytes.as_ref()) { + let destination = match Destination::decode_all(&mut &*destination_bytes) { Ok(destination) => destination, Err(_) => return MintlayerErrorCode::InvalidDestination.into(), }; @@ -962,27 +957,32 @@ extern "C" fn mintlayer_encode_compact_length(length: u32) -> ByteArray { encode_to_byte_array(&len) } -struct CustomAllocator; +// Note: can't use this allocator globally in tests, because allocations start +// to happen too early (before main). +#[cfg(not(test))] +mod global_alloc { + use core::alloc::{GlobalAlloc, Layout}; + + use crate::micropython::ffi::{gc_alloc, gc_free}; + + struct CustomAllocator; -unsafe impl GlobalAlloc for CustomAllocator { - unsafe fn alloc(&self, layout: Layout) -> *mut u8 { - unsafe { - let ptr_void = ffi::gc_alloc(layout.size(), 0); // Call ffi::gc_alloc - if ptr_void.is_null() { - return null_mut(); + unsafe impl GlobalAlloc for CustomAllocator { + unsafe fn alloc(&self, layout: Layout) -> *mut u8 { + unsafe { gc_alloc(layout.size(), 0).cast() } + } + + unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) { + unsafe { + gc_free(ptr.cast()); } - ptr_void as *mut u8 // Cast the pointer to *mut u8 } } - unsafe fn dealloc(&self, _ptr: *mut u8, _layout: Layout) { - // Implement deallocation logic here if needed - } + #[global_allocator] + static GLOBAL_ALLOCATOR: CustomAllocator = CustomAllocator; } -#[global_allocator] -static GLOBAL_ALLOCATOR: CustomAllocator = CustomAllocator; - fn handle_err_or_encode(x: Result) -> ByteArray { match x { Ok(value) => encode_to_byte_array(&value), @@ -1005,3 +1005,18 @@ fn encode_to_byte_array(x: &T) -> ByteArray { len_or_err: LenOrError { len }, } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn basic() { + let hash: [u8; 32] = [0; 32]; + let result = mintlayer_encode_utxo_input(hash.as_ptr(), 32, 123, 1); + assert!(result.data != core::ptr::null()); + + let result = mintlayer_encode_utxo_input(hash.as_ptr(), 31, 123, 1); + assert!(result.data == core::ptr::null()); + } +} diff --git a/core/embed/upymod/modtrezormintlayer/modtrezormintlayer.c b/core/embed/upymod/modtrezormintlayer/modtrezormintlayer.c index 0d865e3ac7..ba91d2095f 100644 --- a/core/embed/upymod/modtrezormintlayer/modtrezormintlayer.c +++ b/core/embed/upymod/modtrezormintlayer/modtrezormintlayer.c @@ -25,7 +25,7 @@ #include TREZOR_BOARD -// #if MICROPY_PY_TREZORMINTLAYER +#if !BITCOIN_ONLY #include "modtrezormintlayer-input-comm.h" #include "modtrezormintlayer.h" @@ -120,4 +120,4 @@ const mp_obj_module_t mp_module_trezormintlayer = { MP_REGISTER_MODULE(MP_QSTR_trezormintlayer, mp_module_trezormintlayer); -// #endif // MICROPY_PY_TREZORMINTLAYER +#endif // !BITCOIN_ONLY diff --git a/core/embed/upymod/modtrezormintlayer/utils.c b/core/embed/upymod/modtrezormintlayer/utils.c index ee8319c568..81fa591c00 100644 --- a/core/embed/upymod/modtrezormintlayer/utils.c +++ b/core/embed/upymod/modtrezormintlayer/utils.c @@ -9,40 +9,40 @@ void handle_err(ByteArray *res) { switch (res->len_or_err.err) { case WrongHashSize: - mp_raise_ValueError("Invalid hash size"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid hash size")); break; case InvalidUtxoType: - mp_raise_ValueError("Invalid UTXO type"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid UTXO type")); break; case InvalidAmount: - mp_raise_ValueError("Invalid amount"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid amount")); break; case InvalidAccountCommand: - mp_raise_ValueError("Invalid account command"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid account command")); break; case InvalidDestination: - mp_raise_ValueError("Invalid destination"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid destination")); break; case InvalidIsTokenUnfreezable: - mp_raise_ValueError("Invalid token unfreezable flag"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid token unfreezable flag")); break; case InvalidIsTokenFreezable: - mp_raise_ValueError("Invalid token freezable flag"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid token freezable flag")); break; case InvalidVrfPublicKey: - mp_raise_ValueError("Invalid VRF public key"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid VRF public key")); break; case InvalidPublicKey: - mp_raise_ValueError("Invalid public key"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid public key")); break; case InvalidOutputTimeLock: - mp_raise_ValueError("Invalid output time lock"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid output time lock")); break; case InvalidTokenTotalSupply: - mp_raise_ValueError("Invalid token total supply"); + mp_raise_ValueError(MP_ERROR_TEXT("Invalid token total supply")); break; default: - mp_raise_ValueError("Unknown error"); + mp_raise_ValueError(MP_ERROR_TEXT("Unknown error")); break; } } diff --git a/tests/device_tests/mintlayer/__init__.py b/tests/device_tests/mintlayer/__init__.py index e69de29bb2..777f48f8e0 100644 --- a/tests/device_tests/mintlayer/__init__.py +++ b/tests/device_tests/mintlayer/__init__.py @@ -0,0 +1,12 @@ +import pytest + +# Marks common to all Mintlayer tests (must be imported explicitly in each test file) +pytestmark = [ + pytest.mark.altcoin, + pytest.mark.mintlayer, + pytest.mark.setup_client( + mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" + ), + # This means that the tests should be run on all models except for the legacy one (i.e. Model One). + pytest.mark.models("core"), +] diff --git a/tests/device_tests/mintlayer/test_get_address.py b/tests/device_tests/mintlayer/test_get_address.py index 60f0d09379..81d85b0465 100644 --- a/tests/device_tests/mintlayer/test_get_address.py +++ b/tests/device_tests/mintlayer/test_get_address.py @@ -21,6 +21,8 @@ from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path +from . import pytestmark # noqa + GET_ADDRESS_VECTORS = [ (1, "mtc1qyumjs84s5nqgcp6nw9kwde9mn7akph6hgtulsdk"), (2, "tmt1qx5p4r2en7c99mpmg2tz9hucxfarf4k6dyyvsahr"), @@ -31,11 +33,6 @@ CHAIN_TYPE_TO_COIN = {1: 19788, 2: 1, 3: 1, 4: 1} -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize("chain_type, address", GET_ADDRESS_VECTORS) def test_mintlayer_get_address(client: Client, chain_type: int, address: str): with client: @@ -53,11 +50,6 @@ def test_mintlayer_get_address(client: Client, chain_type: int, address: str): CHAIN_TYPES = [1, 2, 3, 4] -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize("chain_type", CHAIN_TYPES) def test_mintlayer_get_address_forbidden_path(client: Client, chain_type: int): coin = CHAIN_TYPE_TO_COIN[chain_type] diff --git a/tests/device_tests/mintlayer/test_get_public_key.py b/tests/device_tests/mintlayer/test_get_public_key.py index e87f65c2e2..4ee4527041 100644 --- a/tests/device_tests/mintlayer/test_get_public_key.py +++ b/tests/device_tests/mintlayer/test_get_public_key.py @@ -22,6 +22,7 @@ from trezorlib.tools import parse_path from ...input_flows import InputFlowShowXpubQRCode +from . import pytestmark # noqa GET_PUBLIC_KEY_VECTORS = [ ( @@ -49,11 +50,6 @@ CHAIN_TYPE_TO_COIN = {1: 19788, 2: 1, 3: 1, 4: 1} -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize("chain_type, pub_key, chain_code", GET_PUBLIC_KEY_VECTORS) def test_mintlayer_get_public_key( client: Client, chain_type: int, pub_key: str, chain_code: str @@ -79,11 +75,6 @@ def test_mintlayer_get_public_key( CHAIN_TYPES = [1, 2, 3, 4] -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize("chain_type", CHAIN_TYPES) def test_mintlayer_get_public_key_forbidden_path(client: Client, chain_type: int): coin = CHAIN_TYPE_TO_COIN[chain_type] diff --git a/tests/device_tests/mintlayer/test_sign_message.py b/tests/device_tests/mintlayer/test_sign_message.py index 2659d296d7..79372542cd 100644 --- a/tests/device_tests/mintlayer/test_sign_message.py +++ b/tests/device_tests/mintlayer/test_sign_message.py @@ -6,6 +6,8 @@ from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path +from . import pytestmark # noqa + M_ADDRESS = "mtc1qyumjs84s5nqgcp6nw9kwde9mn7akph6hgtulsdk" M_PK_ADDRESS = "mptc1qgpm7mud2tddualet6wxe9yglkzf92vup8ljxz2u4lajueqf696x4hs2ryf7j" M_SIGNATURE = "7d8a743ada09e7ca8e76cf99429385a1651a9738d96a78c6b601c49a7cb20896d076e1c4d4e8a514ad73f4b88fe115cb30b61e1c04fc96d999baeabd32f82fb2" @@ -31,11 +33,6 @@ CHAIN_TYPE_TO_COIN = {1: 19788, 2: 1, 3: 1, 4: 1} -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize( "chain_type, addr_type, expected_address, expected_signature", SIGN_TEST_VECTORS ) @@ -64,11 +61,6 @@ def test_mintlayer_sign_message( ) -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize("chain_type, addr_type", INVALID_PATH_TEST_VECTORS) def test_mintlayer_sign_message_error_path( client: Client, chain_type: int, addr_type: str diff --git a/tests/device_tests/mintlayer/test_sign_tx.py b/tests/device_tests/mintlayer/test_sign_tx.py index 72816709be..733c5772be 100644 --- a/tests/device_tests/mintlayer/test_sign_tx.py +++ b/tests/device_tests/mintlayer/test_sign_tx.py @@ -26,6 +26,8 @@ from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path +from . import pytestmark # noqa + B = messages.ButtonRequestType @@ -161,11 +163,6 @@ def request_finished() -> messages.MintlayerTxRequest: CHAIN_TYPE_TO_COIN = {1: 19788, 2: 1, 3: 1, 4: 1} -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize( "chain_type, multisig_addr, delegation_id, token_id, order_id, pool_id, vrf_public_key, input_commitments_version, sig1, sig2", SIGN_TX_VECTORS, @@ -579,13 +576,12 @@ def test_mintlayer_sign_tx( assert sig.signature.hex() == expected_sig -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) -def test_mintlayer_random_sign_tx(client: Client): - rng = make_rng() +# Note: the UI output of these tests is checked by the UI tests (target test_emu_ui_multicore), +# so they cannot use randomization that affects the UI. This is why we use an array of predefined +# seeds instead of a random one. +@pytest.mark.parametrize("seed", [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) +def test_mintlayer_random_sign_tx(client: Client, seed: int): + rng = make_rng_with_seed(seed) with client: num_inputs = rng.randint(1, 10) @@ -694,11 +690,6 @@ def test_mintlayer_random_sign_tx(client: Client): CHAIN_TYPES = [1, 2, 3, 4] -@pytest.mark.altcoin -@pytest.mark.mintlayer -@pytest.mark.setup_client( - mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" -) @pytest.mark.parametrize("chain_type", CHAIN_TYPES) def test_mintlayer_sign_tx_forbidden_path(client: Client, chain_type: int): coin = CHAIN_TYPE_TO_COIN[chain_type] @@ -792,5 +783,9 @@ def test_mintlayer_sign_tx_forbidden_path(client: Client, chain_type: int): def make_rng() -> random.Random: seed = random.randint(0, sys.maxsize) + return make_rng_with_seed(seed) + + +def make_rng_with_seed(seed: int) -> random.Random: print(f"Using rng seed {seed}") return random.Random(seed) diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 715ac95b3e..4a39cd091a 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -5117,6 +5117,60 @@ "T2T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[stake_main]": "a5d2b24d8a56f04338e221f9ac1c98c08ff9eee8bd9ba13c0d1e32a0e8219067", "T2T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_holesky]": "223b3b7d0d7ee68f06690638cc7e12f1b154da2de9ba4fab606f33ae24865467", "T2T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_main]": "223b3b7d0d7ee68f06690638cc7e12f1b154da2de9ba4fab606f33ae24865467", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[1-mtc1qyumjs84s5nqgcp6nw9kwde9mn7-958d9629": "27704cf2e6934981a7493459c7f9338662e2cf0c6d1f5f4caf312dc86f138611", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[2-tmt1qx5p4r2en7c99mpmg2tz9hucxfa-ca797219": "c89bcfc22826398c107110be0431b622fa715ccbab1deae1916bc621054de1df", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[3-rmt1qx5p4r2en7c99mpmg2tz9hucxfa-ba1d4e8b": "324cf7d0a18608c095d1039189239822535e3a369090d875fec9f50c3338c045", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[4-smt1qx5p4r2en7c99mpmg2tz9hucxfa-1cd3e459": "b72c753a7b02f3a3170236d2635d4113fa93577dc09a3ccd8ba4172abb0a1be6", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[1]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[2]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[3]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[4]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[1-03bf6f8d52dade77f95e9c6c9-bce7b097": "09b886c23a52752a4d493b9c26e09dfd188c68e1a08de197e9b7ec44bb2cfb2e", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[2-02a7451395735369f2ecdfc82-959d8d3b": "6838f9e217d9c1bd4027c9f994d61351353ce2752266d71be6e8bfea515705d4", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[3-02a7451395735369f2ecdfc82-a178da91": "6838f9e217d9c1bd4027c9f994d61351353ce2752266d71be6e8bfea515705d4", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[4-02a7451395735369f2ecdfc82-12a5f3e2": "6838f9e217d9c1bd4027c9f994d61351353ce2752266d71be6e8bfea515705d4", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[1]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[2]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[3]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[4]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY-mptc1qgpm7mud2tddu-caa9dfd5": "7c4a98ba9dab1ca1d65834f8b458aadf73f15fef8cdf7992793e210424e19dcb", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY_HASH-mtc1qyumjs84s-b8db8a1c": "659ac1d4a32deb7ee3d67aba05d10a209a2e016f992b1695a08c9ec3f6b3b47b", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY-tpmt1qgp2w3gnj4e4x-7d49e956": "4474ec1460e9d5c8009d2a4ac3c769e745c8c8f7ded2697a51a59227c80f59bb", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY_HASH-tmt1qx5p4r2en-dadf38b6": "5614787426a81975f5a310ae5e64493b0bc7551036869bf2a462809190fb90ef", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY-rpmt1qgp2w3gnj4e4x-4455d536": "d6efb2079d3dbf45f30a3dacdc74e88016f281b93494cdf7b69b15b6c0ce17ab", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY_HASH-rmt1qx5p4r2en-9aa6621a": "27e352e5bb89e8da61688104e787f9ba61da320016db91458fb5202a5662f42d", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY-spmt1qgp2w3gnj4e4x-c60fc17e": "9f288e911800d8ccfda22a0ef311ba5cb5f4269042ecec8a33b2d241a3fc187a", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY_HASH-smt1qx5p4r2en-b6afe727": "dbc451b02fd65bebcfe5ffffc69c34133a6dcdfad3d15455d6e908c310dc42b3", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY_HASH]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY_HASH]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY_HASH]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY_HASH]": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[0]": "8d95d3dd1bf9f56c3390e4a24fad47b16e93ee3ac2827da453894f65e6c64967", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[1]": "9a2b2d585af43dbc6f333990991eedeb0c7da23284f845e287789afb8ecaa011", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[2]": "b830da972d7b901dfc364104c4c23e71fcc6b4ce26688fbab5baf7759497a5b6", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[3]": "bd74d35a13fb6c8049aacb9ebdfd4d25be4d7227281bc59b296bf1dcd8162b5f", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[4]": "ae83b579e9502f71beda47f0179ceb81b9402f63d90e78d837d8f022836406fc", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[5]": "52a61b4e82851ddff6cd3e462ab008a1cc7cc1b01c3ebce6cdd23fe3f79feee8", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[6]": "eee4a4eb3c5fbbc84cc41b6eeaaf83f53a1a2ca104833710eb69be667c42f53b", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[7]": "1f6215ef33e7234e9d0b4f17508321d7af604de7fc0ea119227ac742a5a60e5e", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[8]": "656771d3c89c44880fb4193e30f856d09deb6ef204840ab9b9cda1081e7e3f6f", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[9]": "7ae517807a3db5cffe8c74ab11b23ec48b78fefb8d61d216f7686159cd89dc04", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-48fa3749": "add71e3229c2372cf87cd4a024f839f22024f0450b4e1fc25a651d9828c3604f", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-806f1226": "add71e3229c2372cf87cd4a024f839f22024f0450b4e1fc25a651d9828c3604f", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-292a1a65": "e8dcd3dccf499a21f92f7450c10af385d547d6a16af4c6e575e375c4af83e161", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-e0a7c791": "e8dcd3dccf499a21f92f7450c10af385d547d6a16af4c6e575e375c4af83e161", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-4f3bcdbb": "a104df4b38d951e58fd3c8cb712c2d8932855f573483730daccae8bd5eded447", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-f84ed27e": "a104df4b38d951e58fd3c8cb712c2d8932855f573483730daccae8bd5eded447", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-c2cd7dee": "0e87cfbee66b9a190e6e7c08082df69792513d4815d72a18ffbf07336c61cf7a", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-cdf551cc": "0e87cfbee66b9a190e6e7c08082df69792513d4815d72a18ffbf07336c61cf7a", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[1]": "27704cf2e6934981a7493459c7f9338662e2cf0c6d1f5f4caf312dc86f138611", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[2]": "c89bcfc22826398c107110be0431b622fa715ccbab1deae1916bc621054de1df", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[3]": "324cf7d0a18608c095d1039189239822535e3a369090d875fec9f50c3338c045", +"T2T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[4]": "b72c753a7b02f3a3170236d2635d4113fa93577dc09a3ccd8ba4172abb0a1be6", "T2T1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt": "34e053b4d18d9debecdf9a83d517c0eec3468a599dec8b816cdee8ba64fa9051", "T2T1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt_badlen": "8b1ccc0dbd6e6e3d02a896650ab90dd332ba4edbbcc4095e0fbb6a96e5256f75", "T2T1_en_misc-test_msg_cipherkeyvalue.py::test_encrypt": "b3e810d9acc84d34be6b4fd5de85cabd0f7f122a07d46c668027d1328318e190", @@ -14190,6 +14244,60 @@ "T3B1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[stake_main]": "0418464d65cf5d0b7d608a5212456b430b5b0ed92599771f48c7fd498ad020e4", "T3B1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_holesky]": "d07b999f7ad549bd5886ef6c51ae2bec186fa004dea752e29fd966df4685ae50", "T3B1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_main]": "d07b999f7ad549bd5886ef6c51ae2bec186fa004dea752e29fd966df4685ae50", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[1-mtc1qyumjs84s5nqgcp6nw9kwde9mn7-958d9629": "84c05350977dbc16c9f6845ffd3a192377a6ff0551c77ee535f31d8f7cf4c943", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[2-tmt1qx5p4r2en7c99mpmg2tz9hucxfa-ca797219": "2db4ea945d1884dd3aa1ea1ba59b0036cbf786d4541f4dfcca3237bdd943a470", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[3-rmt1qx5p4r2en7c99mpmg2tz9hucxfa-ba1d4e8b": "851c46d1050b2eedebcf09d80830afd299bd938e85632b5d86d308db319a016d", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[4-smt1qx5p4r2en7c99mpmg2tz9hucxfa-1cd3e459": "4f1efd97ccf28ad33fada71b9a0547cc3a3b79eacbbe8035763db53cce127f7c", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[1]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[2]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[3]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[4]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[1-03bf6f8d52dade77f95e9c6c9-bce7b097": "b6c40cb863ab231acfc465eee1fa1283f484619e3c37a20536c6c15c513a2d6c", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[2-02a7451395735369f2ecdfc82-959d8d3b": "b49b115149edf76f47bc1cc142419e95e8146e06d140254897e9d948817f3a8b", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[3-02a7451395735369f2ecdfc82-a178da91": "b49b115149edf76f47bc1cc142419e95e8146e06d140254897e9d948817f3a8b", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[4-02a7451395735369f2ecdfc82-12a5f3e2": "b49b115149edf76f47bc1cc142419e95e8146e06d140254897e9d948817f3a8b", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[1]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[2]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[3]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[4]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY-mptc1qgpm7mud2tddu-caa9dfd5": "b5a8850a69b8fdd99b90077f0b777a15e095eac008ea7c8d402f4bd89776d438", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY_HASH-mtc1qyumjs84s-b8db8a1c": "6cddd828275e59853975a4eded996cfa0874c1efcf9f8be7125757badd9f1865", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY-tpmt1qgp2w3gnj4e4x-7d49e956": "7d1df6746f25238fbe73bd3d1f5030201f66d7dadd28ab7f11c6faf2f0cd8946", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY_HASH-tmt1qx5p4r2en-dadf38b6": "e310c4eb48f876190391dfc5af4faa6ff51248b6cf2f4bd56dce8783ef1faf85", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY-rpmt1qgp2w3gnj4e4x-4455d536": "c168139a8205f93d831266872d4c1fe5c6d153fa1051025e1b9c93babc6f45aa", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY_HASH-rmt1qx5p4r2en-9aa6621a": "87a613eef0401d9c6d786724ca299f004307e74258b88a6930a790b544dae839", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY-spmt1qgp2w3gnj4e4x-c60fc17e": "d468ee8d5c8e012ffa4faccc7ef8558ed1005647cf27a635ece874ce3f0c6b0e", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY_HASH-smt1qx5p4r2en-b6afe727": "706fd6febc0f8661372b0b58d4927f2bbd34c337c1ffe12ca43a79a1159167f1", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY_HASH]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY_HASH]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY_HASH]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY_HASH]": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[0]": "23c5e71d0028676e9522a2e671047c35443eced2229428bf5f21a59fec476d04", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[1]": "8250d605982e5e4f1d7774ac381c0ddeea1f6a2cfe3da3e6a385874df054f194", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[2]": "226ca4dd9672cb2b0506b65f1fd5eb2a8e5d3e6b3bd1fbbb84374e8d3f6598f7", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[3]": "a580c762ace2ff13498c19ee655100098833d298d41d46c5fb8bc16ed34d2a21", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[4]": "ad169daea05e32236041fa9b1ef4cec94d94d70fd8ab81eb0581e54a9ac74b91", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[5]": "69ae98628d4a869552b9ba677b435b1722e8cdf6ab35e2792e6bd6bca2c87196", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[6]": "b0d465fc36ac954aeb158958404a5e288b58df56b3b0e495f28089123206ef01", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[7]": "35e3d5213ec6e145ba68e627edb86ff204bfeae900054754ebfc60549bea851a", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[8]": "75530c364b24749a7fee309457a678c9c92afcde848b436b36dc98f50fbef80c", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[9]": "4fe4a7087b88cc5444e838d2a68a2febe313235b154e84f8383dafbbeb5433ec", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-48fa3749": "d7b6ae47c6a77fe64ebcc9dbd65e99136a4da9fc5686da3f287c7274c1e015d3", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-806f1226": "d7b6ae47c6a77fe64ebcc9dbd65e99136a4da9fc5686da3f287c7274c1e015d3", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-292a1a65": "f27393076913fec96e38d698fa1bc53768ca719ebb216f22244da38a8ae7b2df", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-e0a7c791": "f27393076913fec96e38d698fa1bc53768ca719ebb216f22244da38a8ae7b2df", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-4f3bcdbb": "6d66bce89b896371688197372a9bd94dc35d9aabf7a9c5af8425c90488240ae9", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-f84ed27e": "6d66bce89b896371688197372a9bd94dc35d9aabf7a9c5af8425c90488240ae9", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-c2cd7dee": "5db80bb2cb1d7e666023dbb4cd147c74b44207b8f567d1224f5c8929943583eb", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-cdf551cc": "5db80bb2cb1d7e666023dbb4cd147c74b44207b8f567d1224f5c8929943583eb", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[1]": "84c05350977dbc16c9f6845ffd3a192377a6ff0551c77ee535f31d8f7cf4c943", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[2]": "2db4ea945d1884dd3aa1ea1ba59b0036cbf786d4541f4dfcca3237bdd943a470", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[3]": "851c46d1050b2eedebcf09d80830afd299bd938e85632b5d86d308db319a016d", +"T3B1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[4]": "4f1efd97ccf28ad33fada71b9a0547cc3a3b79eacbbe8035763db53cce127f7c", "T3B1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt": "64fcfa249a4d36367f5da39e023d9bf3c193469a986d45c64d2cf3ac2f574774", "T3B1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt_badlen": "1477d62e338f4d7c1bfac2fc5d2fc231218da5768666c11482dc1f83229506f3", "T3B1_en_misc-test_msg_cipherkeyvalue.py::test_encrypt": "e2a9a7e518de0ef49f5bcbaa87f8558483fc5ca5527141b629b3fbc6ab33faa7", @@ -23095,6 +23203,60 @@ "T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[stake_main]": "08feb57bc31f3a91bb1752fe2e02ed4cbe8ed27c92e55d4bf4dfd5a2b7b55713", "T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_holesky]": "d20edeb0ad49d589bd9d6849c8e85b39d7f33ba7c7f97ae78d7cbf21d8272e11", "T3T1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_main]": "d20edeb0ad49d589bd9d6849c8e85b39d7f33ba7c7f97ae78d7cbf21d8272e11", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[1-mtc1qyumjs84s5nqgcp6nw9kwde9mn7-958d9629": "aded8a22d50f8bc8c33574923cda33ef59c4850c2838c9d5d02e794e157e4b52", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[2-tmt1qx5p4r2en7c99mpmg2tz9hucxfa-ca797219": "a8495a1dfd32cab5e08f260482bcf731b96b675745a42e293e09e2d202818782", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[3-rmt1qx5p4r2en7c99mpmg2tz9hucxfa-ba1d4e8b": "699961658406ec095c7101e643f376867f2d756d7da20d01aca5e14d805493e6", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[4-smt1qx5p4r2en7c99mpmg2tz9hucxfa-1cd3e459": "491d138243eec140f289eb7b1f08b947826b764a23dfa7fe22038e80f0262058", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[1]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[2]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[3]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[4]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[1-03bf6f8d52dade77f95e9c6c9-bce7b097": "a0727726222d2114c33c21958d77fcca6a0e0039f874e6780e7bf32f70f5f1e5", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[2-02a7451395735369f2ecdfc82-959d8d3b": "6d5f976c0f535b2a49ebad285f1504ade432753720096cfe72f102d52b8fe6a7", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[3-02a7451395735369f2ecdfc82-a178da91": "6d5f976c0f535b2a49ebad285f1504ade432753720096cfe72f102d52b8fe6a7", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[4-02a7451395735369f2ecdfc82-12a5f3e2": "6d5f976c0f535b2a49ebad285f1504ade432753720096cfe72f102d52b8fe6a7", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[1]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[2]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[3]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[4]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY-mptc1qgpm7mud2tddu-caa9dfd5": "70e44d93a595be6e98b9e4715d19b7acceb6691b66a2924aee94d3cc090bd462", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY_HASH-mtc1qyumjs84s-b8db8a1c": "31bb65f106f7b1a0cc4f289c2f9665466f879429ce0fae35aa911e2a92fe6600", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY-tpmt1qgp2w3gnj4e4x-7d49e956": "2eb3d42673b55be956794cf1b8aaf9f297a9395fb9afdc5e8ee286cd4bffd636", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY_HASH-tmt1qx5p4r2en-dadf38b6": "a3a030869d722f3a42ab2d2c4266967323556ac2188432fb8c6050b4162b6743", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY-rpmt1qgp2w3gnj4e4x-4455d536": "0cf7705ba62d2ca6da632701ca2f15cb055e760cb217718eddbdbf656122f1d0", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY_HASH-rmt1qx5p4r2en-9aa6621a": "7a1c65b2862df5252e2f01149139fececbb54f5085051f1ca0915fc853c4aad0", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY-spmt1qgp2w3gnj4e4x-c60fc17e": "1f4db4ee88893388b95bcb165711a9b5236299769c283d7abf0b3328ad8104d3", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY_HASH-smt1qx5p4r2en-b6afe727": "61b506c7deaf0a35bbc8e68bf4119c4e3ad39c61acaf5383aea1e721b14b6e50", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY_HASH]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY_HASH]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY_HASH]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY_HASH]": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[0]": "8517230b9283a343ce3aaef294b2074d060fe0a6b3f488ecf6c945ec422835b7", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[1]": "e813b5c02a8544a22ecfe9896e86c6ab964bcc3567b8594bb35c46aff68a8ec8", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[2]": "7250af849168de37507c2e9119b9b51ceae7b371c06482d543ecbe37e5c31d33", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[3]": "04ae4fd65408d4f6ac1293c92f6bb7b8ef84fabbbca58299afcaf874fc32485a", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[4]": "6f95b05c135107684356a7c131e2c5427451732b4e04eefee43f25df256cbca3", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[5]": "6d535abf6425e4e3f35ad66b2eea798333622d598191c377eb564480691111c8", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[6]": "f5f10d5cd81bb86754081b38764beed7e146101cc94d499e28e204aa6a80129d", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[7]": "96a817998432c47940217019c24aedb2d218f8af49ba4fa1b91939acbd37f6d6", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[8]": "d55210700323bb0c08e3b14b8b53f7b4c3288dceda5fb6b1aa4d9ccfe036e05b", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[9]": "3511ea7f1cd3a6d23ec6570f37676f3e1bca053c71026bd87627df32693078d1", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-48fa3749": "df138b4138a5ac6dbc3ab4b39a0f655cffc5e570c466dd9e114939a9cd43c8e6", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-806f1226": "df138b4138a5ac6dbc3ab4b39a0f655cffc5e570c466dd9e114939a9cd43c8e6", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-292a1a65": "316a10526f2c721d15345e4233cf518d7c32b09317e0643996a30477ccfeb92d", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-e0a7c791": "316a10526f2c721d15345e4233cf518d7c32b09317e0643996a30477ccfeb92d", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-4f3bcdbb": "256f3de8a4b294eca872b45c994cd807410dc5f344e56ba813d70dd99cf04655", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-f84ed27e": "256f3de8a4b294eca872b45c994cd807410dc5f344e56ba813d70dd99cf04655", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-c2cd7dee": "2f1e135e3ddd414d95466b43c18306f0f4ce5a237ca04864a77c8475de094285", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-cdf551cc": "2f1e135e3ddd414d95466b43c18306f0f4ce5a237ca04864a77c8475de094285", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[1]": "aded8a22d50f8bc8c33574923cda33ef59c4850c2838c9d5d02e794e157e4b52", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[2]": "a8495a1dfd32cab5e08f260482bcf731b96b675745a42e293e09e2d202818782", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[3]": "699961658406ec095c7101e643f376867f2d756d7da20d01aca5e14d805493e6", +"T3T1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[4]": "491d138243eec140f289eb7b1f08b947826b764a23dfa7fe22038e80f0262058", "T3T1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt": "20adb27bb11ffea69f351b2b01b84972c30a44b4b527844edf8b1f9dde4e667d", "T3T1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt_badlen": "cb8641952bec9e793e7d19f281a85a0ca1be2c3397ca5c0cf4ee7ad905429984", "T3T1_en_misc-test_msg_cipherkeyvalue.py::test_encrypt": "3b19246cb825321b5ab7aadf6806c158ecf07b66fc709fb69ab1cb2e53c9b671", @@ -32043,6 +32205,60 @@ "T3W1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[stake_main]": "e55601a7a839e244cf82f989999ed184d8eaff35e3fa514c0c7de14722839de6", "T3W1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_holesky]": "fac659ae86aa3a47d9f053a4f3bc806e6d21b127f1e884a980e0d3e87caa1ab8", "T3W1_en_ethereum-test_signtx.py::test_signtx_staking_eip1559[unstake_main]": "fac659ae86aa3a47d9f053a4f3bc806e6d21b127f1e884a980e0d3e87caa1ab8", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[1-mtc1qyumjs84s5nqgcp6nw9kwde9mn7-958d9629": "34b87b9a100c26c13c39aacf5a551b59f274ec3c857d725a576ed4f068fbfb9f", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[2-tmt1qx5p4r2en7c99mpmg2tz9hucxfa-ca797219": "2f1cffd719b876597ccfad4abf54edd726b1d3ec70d53abe829a266945b7e636", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[3-rmt1qx5p4r2en7c99mpmg2tz9hucxfa-ba1d4e8b": "d2445634161f26cefbdb0fea4061a3fb3ec0f5edc775b3a243c3543ffddd4598", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address[4-smt1qx5p4r2en7c99mpmg2tz9hucxfa-1cd3e459": "4893082e31e6165d402468482f2dc02ccb887a00651030e362a4d5f6ef926848", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[1]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[2]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[3]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_get_address.py::test_mintlayer_get_address_forbidden_path[4]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[1-03bf6f8d52dade77f95e9c6c9-bce7b097": "988487699bdd7eacf1e9d32aed76f1c14ea4150fd1dce2c6a46b61101ed535d0", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[2-02a7451395735369f2ecdfc82-959d8d3b": "9e70a274472b743754c82afa30dd5346b7c3bb529265f28d28a816fe9e08c256", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[3-02a7451395735369f2ecdfc82-a178da91": "9e70a274472b743754c82afa30dd5346b7c3bb529265f28d28a816fe9e08c256", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key[4-02a7451395735369f2ecdfc82-12a5f3e2": "9e70a274472b743754c82afa30dd5346b7c3bb529265f28d28a816fe9e08c256", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[1]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[2]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[3]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_get_public_key.py::test_mintlayer_get_public_key_forbidden_path[4]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY-mptc1qgpm7mud2tddu-caa9dfd5": "182a3a4296fe790ffeeb978681a61c66bfc60555dd44e2985dbd13ae0b290e60", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[1-PUBLIC_KEY_HASH-mtc1qyumjs84s-b8db8a1c": "5aa1e36c6ad42cac0e24d49b33814e5f720ae6af5cf5ebd2cd9a055fa89822a0", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY-tpmt1qgp2w3gnj4e4x-7d49e956": "0cb48d6a86b805c84fa121f6bbd5249eede0fa42825259aa1ecb6271cecbe828", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[2-PUBLIC_KEY_HASH-tmt1qx5p4r2en-dadf38b6": "87cff37ec76b9ce44884732195c2843d63705f64ed190ad8f31faf8e005e2274", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY-rpmt1qgp2w3gnj4e4x-4455d536": "30fb6ef2fc042dadc9faf4c501669a4028a92b200a9d23cd4ed06060468ef8b7", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[3-PUBLIC_KEY_HASH-rmt1qx5p4r2en-9aa6621a": "a83819e17cde8203d32cd827730706e096129898af8f9ec95a7845c0b0073cf7", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY-spmt1qgp2w3gnj4e4x-c60fc17e": "f5876e4a3b2852e89811cef2b5e2097dc3defd908bee0c0c5dc4b7c17bfbe3f5", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message[4-PUBLIC_KEY_HASH-smt1qx5p4r2en-b6afe727": "ca0572df1cec1293676c57a7e0d5cda7799c0c23306ca78addf5e6c7d797f735", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[1-PUBLIC_KEY_HASH]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[2-PUBLIC_KEY_HASH]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[3-PUBLIC_KEY_HASH]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_message.py::test_mintlayer_sign_message_error_path[4-PUBLIC_KEY_HASH]": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[0]": "4f0ac9bbe440c9b86235becc595d7bf35e08556bfae11c0d249d1ffc215fa319", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[1]": "6793d4c4a80336010494e8fe9947cba69d9a6e9340edf80c1b7d3adebc68b9ce", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[2]": "8962aebddd33231418ff17c05bda2e6029f612f3c7c7df2f2e2092b4bccffeb3", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[3]": "2b3803df38127d13b51b8bc70d2374213e2f8631bf1ddef7d8b6e52da39c4ce6", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[4]": "3488710de126bc6abd07b471b00b5c270b1c1e25af77ab4c03975b4d74d2b6fb", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[5]": "1512c411154a046ec750d82d35776a3edc5769f119430636d606e8d70372c7b3", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[6]": "9454e902150bde57946915dac32d61b07c1636f9d6fd5b9ac5c37be9fd925b29", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[7]": "c500931fb7a49550f45b22e7e65519c02d6fe7511570e7c7e082b4425e5b64fe", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[8]": "4da47b2a2ed495513ebf511976858431a8b964ab84d29d19d2ed4be916a96848", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_random_sign_tx[9]": "080b1a44a546d803c2bb66c7f0761098b3fbda7764825d0c646c301b097c2a21", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-48fa3749": "f82862f49553663591bbe17c466975709ac327ee6083a2b0c98ae0eee8d59946", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[1-mmtc1q3plqylyzrj4mdemdfs39v8zy574rnztc5-806f1226": "f82862f49553663591bbe17c466975709ac327ee6083a2b0c98ae0eee8d59946", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-292a1a65": "652ded9d967a86b806e2da9f7c735f2ba57363822e94b713fba5b3ca4322da35", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[2-tmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-e0a7c791": "652ded9d967a86b806e2da9f7c735f2ba57363822e94b713fba5b3ca4322da35", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-4f3bcdbb": "27ef7425899c13ffaef86e6b826d7824243d4d3e8be480ea0a5a2a765e17f63e", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[3-rmtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-f84ed27e": "27ef7425899c13ffaef86e6b826d7824243d4d3e8be480ea0a5a2a765e17f63e", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-c2cd7dee": "abcd0b0280940097b37ea9987014d1c811afd18c3b2382f9161fc9b95352b686", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx[4-smtc1qjn5ls4sz90ppcart66jf0vx0n0u8ndjlu-cdf551cc": "abcd0b0280940097b37ea9987014d1c811afd18c3b2382f9161fc9b95352b686", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[1]": "34b87b9a100c26c13c39aacf5a551b59f274ec3c857d725a576ed4f068fbfb9f", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[2]": "2f1cffd719b876597ccfad4abf54edd726b1d3ec70d53abe829a266945b7e636", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[3]": "d2445634161f26cefbdb0fea4061a3fb3ec0f5edc775b3a243c3543ffddd4598", +"T3W1_en_mintlayer-test_sign_tx.py::test_mintlayer_sign_tx_forbidden_path[4]": "4893082e31e6165d402468482f2dc02ccb887a00651030e362a4d5f6ef926848", "T3W1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt": "4caf93dc5397f469a33d7cb1dff3b7158f5f3d9f97ebba4114946f6110f91110", "T3W1_en_misc-test_msg_cipherkeyvalue.py::test_decrypt_badlen": "7a37bd09a138b953bd3565137fcc3ebd688e45eabf709b470546eac4abc4c968", "T3W1_en_misc-test_msg_cipherkeyvalue.py::test_encrypt": "36f58d199ebbcaf71b349aa96bace9f1fcf7fd8dd97c18fbffc4be6fd5e8ca22", From 7acba5d2a33a672e4ce0502fdd5485b761896053 Mon Sep 17 00:00:00 2001 From: Mykhailo Kremniov Date: Mon, 14 Jul 2025 17:54:41 +0300 Subject: [PATCH 2/3] Set Capability_Mintlayer to 99 --- common/protob/messages-management.proto | 2 +- core/src/trezor/enums/Capability.py | 2 +- core/src/trezor/enums/__init__.py | 2 +- python/src/trezorlib/messages.py | 2 +- .../protos/generated/messages_management.rs | 221 +++++++++--------- 5 files changed, 114 insertions(+), 115 deletions(-) diff --git a/common/protob/messages-management.proto b/common/protob/messages-management.proto index f902589733..4571bac59f 100644 --- a/common/protob/messages-management.proto +++ b/common/protob/messages-management.proto @@ -168,7 +168,7 @@ message Features { Capability_Haptic = 21 [(bitcoin_only) = true]; Capability_BLE = 22 [(bitcoin_only) = true]; // Bluetooth Low Energy Capability_NFC = 23 [(bitcoin_only) = true]; // Near Field Communications - Capability_Mintlayer = 24; + Capability_Mintlayer = 99; } } diff --git a/core/src/trezor/enums/Capability.py b/core/src/trezor/enums/Capability.py index 131a5b6fad..14a1cc83cd 100644 --- a/core/src/trezor/enums/Capability.py +++ b/core/src/trezor/enums/Capability.py @@ -27,4 +27,4 @@ Tezos = 13 U2F = 14 Solana = 18 - Mintlayer = 24 + Mintlayer = 99 diff --git a/core/src/trezor/enums/__init__.py b/core/src/trezor/enums/__init__.py index 0fbf8ced0f..b11b125ce9 100644 --- a/core/src/trezor/enums/__init__.py +++ b/core/src/trezor/enums/__init__.py @@ -234,7 +234,7 @@ class Capability(IntEnum): Haptic = 21 BLE = 22 NFC = 23 - Mintlayer = 24 + Mintlayer = 99 class SdProtectOperationType(IntEnum): DISABLE = 0 diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py index ea6a2259eb..8fe720bc27 100644 --- a/python/src/trezorlib/messages.py +++ b/python/src/trezorlib/messages.py @@ -263,7 +263,7 @@ class Capability(IntEnum): Haptic = 21 BLE = 22 NFC = 23 - Mintlayer = 24 + Mintlayer = 99 class SdProtectOperationType(IntEnum): diff --git a/rust/trezor-client/src/protos/generated/messages_management.rs b/rust/trezor-client/src/protos/generated/messages_management.rs index 86db76e4fd..6199c0d9db 100644 --- a/rust/trezor-client/src/protos/generated/messages_management.rs +++ b/rust/trezor-client/src/protos/generated/messages_management.rs @@ -2757,7 +2757,7 @@ pub mod features { // @@protoc_insertion_point(enum_value:hw.trezor.messages.management.Features.Capability.Capability_NFC) Capability_NFC = 23, // @@protoc_insertion_point(enum_value:hw.trezor.messages.management.Features.Capability.Capability_Mintlayer) - Capability_Mintlayer = 24, + Capability_Mintlayer = 99, } impl ::protobuf::Enum for Capability { @@ -2792,7 +2792,7 @@ pub mod features { 21 => ::std::option::Option::Some(Capability::Capability_Haptic), 22 => ::std::option::Option::Some(Capability::Capability_BLE), 23 => ::std::option::Option::Some(Capability::Capability_NFC), - 24 => ::std::option::Option::Some(Capability::Capability_Mintlayer), + 99 => ::std::option::Option::Some(Capability::Capability_Mintlayer), _ => ::std::option::Option::None } } @@ -11690,115 +11690,114 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x80\xa6\x1d\x01\x12\x1b\n\x11Capability_Haptic\x10\x15\x1a\x04\x80\xa6\ \x1d\x01\x12\x18\n\x0eCapability_BLE\x10\x16\x1a\x04\x80\xa6\x1d\x01\x12\ \x18\n\x0eCapability_NFC\x10\x17\x1a\x04\x80\xa6\x1d\x01\x12\x18\n\x14Ca\ - pability_Mintlayer\x10\x18\x1a\x04\xc8\xf3\x18\x01\"\x0c\n\nLockDevice\"\ - &\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\rR\x08expiryMs\"\ - \x0c\n\nEndSession\"\xa1\x05\n\rApplySettings\x12\x1e\n\x08language\x18\ - \x01\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x02\x20\ - \x01(\tR\x05label\x12%\n\x0euse_passphrase\x18\x03\x20\x01(\x08R\rusePas\ - sphrase\x12\x1e\n\nhomescreen\x18\x04\x20\x01(\x0cR\nhomescreen\x120\n\ - \x12_passphrase_source\x18\x05\x20\x01(\rR\x10PassphraseSourceB\x02\x18\ - \x01\x12+\n\x12auto_lock_delay_ms\x18\x06\x20\x01(\rR\x0fautoLockDelayMs\ - \x12Y\n\x10display_rotation\x18\x07\x20\x01(\x0e2..hw.trezor.messages.ma\ - nagement.DisplayRotationR\x0fdisplayRotation\x12=\n\x1bpassphrase_always\ - _on_device\x18\x08\x20\x01(\x08R\x18passphraseAlwaysOnDevice\x12T\n\rsaf\ - ety_checks\x18\t\x20\x01(\x0e2/.hw.trezor.messages.management.SafetyChec\ - kLevelR\x0csafetyChecks\x123\n\x15experimental_features\x18\n\x20\x01(\ - \x08R\x14experimentalFeatures\x129\n\x19hide_passphrase_from_host\x18\ - \x0b\x20\x01(\x08R\x16hidePassphraseFromHost\x12'\n\x0fhaptic_feedback\ - \x18\r\x20\x01(\x08R\x0ehapticFeedback\x12+\n\x11homescreen_length\x18\ - \x0e\x20\x01(\rR\x10homescreenLength\"T\n\x0eChangeLanguage\x12\x1f\n\ - \x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12!\n\x0cshow_display\ - \x18\x02\x20\x01(\x08R\x0bshowDisplay\"T\n\x10DataChunkRequest\x12\x1f\n\ - \x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12\x1f\n\x0bdata_offset\ - \x18\x02\x20\x02(\rR\ndataOffset\"-\n\x0cDataChunkAck\x12\x1d\n\ndata_ch\ - unk\x18\x01\x20\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\x14\n\x05flag\ - s\x18\x01\x20\x02(\rR\x05flags\"#\n\tChangePin\x12\x16\n\x06remove\x18\ - \x01\x20\x01(\x08R\x06remove\"(\n\x0eChangeWipeCode\x12\x16\n\x06remove\ - \x18\x01\x20\x01(\x08R\x06remove\"\xaa\x01\n\tSdProtect\x12]\n\toperatio\ - n\x18\x01\x20\x02(\x0e2?.hw.trezor.messages.management.SdProtect.SdProte\ - ctOperationTypeR\toperation\">\n\x16SdProtectOperationType\x12\x0b\n\x07\ - DISABLE\x10\0\x12\n\n\x06ENABLE\x10\x01\x12\x0b\n\x07REFRESH\x10\x02\"O\ - \n\x04Ping\x12\x1a\n\x07message\x18\x01\x20\x01(\t:\0R\x07message\x12+\n\ - \x11button_protection\x18\x02\x20\x01(\x08R\x10buttonProtection\"\x08\n\ - \x06Cancel\"\x20\n\nGetEntropy\x12\x12\n\x04size\x18\x01\x20\x02(\rR\x04\ - size\"#\n\x07Entropy\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entro\ - py\"/\n\x0fGetFirmwareHash\x12\x1c\n\tchallenge\x18\x01\x20\x01(\x0cR\tc\ - hallenge\"\"\n\x0cFirmwareHash\x12\x12\n\x04hash\x18\x01\x20\x02(\x0cR\ - \x04hash\"2\n\x12AuthenticateDevice\x12\x1c\n\tchallenge\x18\x01\x20\x02\ - (\x0cR\tchallenge\"U\n\x11AuthenticityProof\x12\"\n\x0ccertificates\x18\ - \x01\x20\x03(\x0cR\x0ccertificates\x12\x1c\n\tsignature\x18\x02\x20\x02(\ - \x0cR\tsignature\"\x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevice\x12\x1c\n\t\ - mnemonics\x18\x01\x20\x03(\tR\tmnemonics\x12\x10\n\x03pin\x18\x03\x20\ - \x01(\tR\x03pin\x123\n\x15passphrase_protection\x18\x04\x20\x01(\x08R\ - \x14passphraseProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08la\ - nguageB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12#\ - \n\rskip_checksum\x18\x07\x20\x01(\x08R\x0cskipChecksum\x12\x1f\n\x0bu2f\ - _counter\x18\x08\x20\x01(\rR\nu2fCounter\x12!\n\x0cneeds_backup\x18\t\ - \x20\x01(\x08R\x0bneedsBackup\x12\x1b\n\tno_backup\x18\n\x20\x01(\x08R\ - \x08noBackup\"\x9d\x03\n\x0bResetDevice\x12\x1f\n\x08strength\x18\x02\ - \x20\x01(\r:\x03256R\x08strength\x123\n\x15passphrase_protection\x18\x03\ - \x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\x04\ - \x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\ - \x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05labe\ - l\x12\x1f\n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fCounter\x12\x1f\n\x0b\ - skip_backup\x18\x08\x20\x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\ - \x20\x01(\x08R\x08noBackup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw\ - .trezor.messages.management.BackupType:\x05Bip39R\nbackupType\x12#\n\ren\ - tropy_check\x18\x0b\x20\x01(\x08R\x0centropyCheckJ\x04\x08\x01\x10\x02\"\ - \xe5\x01\n\x0cBackupDevice\x12'\n\x0fgroup_threshold\x18\x01\x20\x01(\rR\ - \x0egroupThreshold\x12O\n\x06groups\x18\x02\x20\x03(\x0b27.hw.trezor.mes\ - sages.management.BackupDevice.Slip39GroupR\x06groups\x1a[\n\x0bSlip39Gro\ - up\x12)\n\x10member_threshold\x18\x01\x20\x02(\rR\x0fmemberThreshold\x12\ - !\n\x0cmember_count\x18\x02\x20\x02(\rR\x0bmemberCount\"b\n\x0eEntropyRe\ - quest\x12-\n\x12entropy_commitment\x18\x01\x20\x01(\x0cR\x11entropyCommi\ - tment\x12!\n\x0cprev_entropy\x18\x02\x20\x01(\x0cR\x0bprevEntropy\"&\n\n\ - EntropyAck\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\x13\n\ - \x11EntropyCheckReady\"5\n\x14EntropyCheckContinue\x12\x1d\n\x06finish\ - \x18\x01\x20\x01(\x08:\x05falseR\x06finish\"\x8d\x04\n\x0eRecoveryDevice\ - \x12\x1d\n\nword_count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passphra\ - se_protection\x18\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epi\ - n_protection\x18\x03\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\ - \x18\x04\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x05\ - \x20\x01(\tR\x05label\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\x08R\ - \x0fenforceWordlist\x12j\n\x0cinput_method\x18\x08\x20\x01(\x0e2G.hw.tre\ - zor.messages.management.RecoveryDevice.RecoveryDeviceInputMethodR\x0binp\ - utMethod\x12\x1f\n\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12O\n\ - \x04type\x18\n\x20\x01(\x0e2+.hw.trezor.messages.management.RecoveryType\ - :\x0eNormalRecoveryR\x04type\";\n\x19RecoveryDeviceInputMethod\x12\x12\n\ - \x0eScrambledWords\x10\0\x12\n\n\x06Matrix\x10\x01J\x04\x08\x07\x10\x08\ - \"\xc5\x01\n\x0bWordRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.tre\ - zor.messages.management.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWor\ - dRequestType\x12\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordR\ - equestType_Matrix9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\ - \"\x1d\n\x07WordAck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04word\"0\n\r\ - SetU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\ - \x13\n\x11GetNextU2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_coun\ - ter\x18\x01\x20\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\ - \x14PreauthorizedRequest\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12R\ - ebootToBootloader\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezo\ - r.messages.management.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\ - \x0bbootCommand\x12'\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmw\ - areHeader\x123\n\x14language_data_length\x18\x03\x20\x01(\r:\x010R\x12la\ - nguageDataLength\"5\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\ - \x13\n\x0fINSTALL_UPGRADE\x10\x01\"\x10\n\x08GetNonce:\x04\x88\xb2\x19\ - \x01\"#\n\x05Nonce\x12\x14\n\x05nonce\x18\x01\x20\x02(\x0cR\x05nonce:\ - \x04\x88\xb2\x19\x01\";\n\nUnlockPath\x12\x1b\n\taddress_n\x18\x01\x20\ - \x03(\rR\x08addressN\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\ - \x13UnlockedPathRequest\x12\x10\n\x03mac\x18\x01\x20\x02(\x0cR\x03mac\"\ - \x14\n\x12ShowDeviceTutorial\"\x12\n\x10UnlockBootloader\"%\n\rSetBright\ - ness\x12\x14\n\x05value\x18\x01\x20\x01(\rR\x05value*\x99\x01\n\nBackupT\ - ype\x12\t\n\x05Bip39\x10\0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\ - \x0fSlip39_Advanced\x10\x02\x12\x1c\n\x18Slip39_Single_Extendable\x10\ - \x03\x12\x1b\n\x17Slip39_Basic_Extendable\x10\x04\x12\x1e\n\x1aSlip39_Ad\ - vanced_Extendable\x10\x05*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\ - \0\x12\x10\n\x0cPromptAlways\x10\x01\x12\x15\n\x11PromptTemporarily\x10\ - \x02*=\n\x0fDisplayRotation\x12\t\n\x05North\x10\0\x12\x08\n\x04East\x10\ - Z\x12\n\n\x05South\x10\xb4\x01\x12\t\n\x04West\x10\x8e\x02*0\n\x10Homesc\ - reenFormat\x12\x08\n\x04Toif\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\ - \x04ToiG\x10\x03*H\n\x0cRecoveryType\x12\x12\n\x0eNormalRecovery\x10\0\ - \x12\n\n\x06DryRun\x10\x01\x12\x18\n\x14UnlockRepeatedBackup\x10\x02BB\n\ - #com.satoshilabs.trezor.lib.protobufB\x17TrezorMessageManagement\x80\xa6\ - \x1d\x01\ + pability_Mintlayer\x10c\x1a\x04\xc8\xf3\x18\x01\"\x0c\n\nLockDevice\"&\n\ + \x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\rR\x08expiryMs\"\x0c\n\ + \nEndSession\"\xa1\x05\n\rApplySettings\x12\x1e\n\x08language\x18\x01\ + \x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x02\x20\x01\ + (\tR\x05label\x12%\n\x0euse_passphrase\x18\x03\x20\x01(\x08R\rusePassphr\ + ase\x12\x1e\n\nhomescreen\x18\x04\x20\x01(\x0cR\nhomescreen\x120\n\x12_p\ + assphrase_source\x18\x05\x20\x01(\rR\x10PassphraseSourceB\x02\x18\x01\ + \x12+\n\x12auto_lock_delay_ms\x18\x06\x20\x01(\rR\x0fautoLockDelayMs\x12\ + Y\n\x10display_rotation\x18\x07\x20\x01(\x0e2..hw.trezor.messages.manage\ + ment.DisplayRotationR\x0fdisplayRotation\x12=\n\x1bpassphrase_always_on_\ + device\x18\x08\x20\x01(\x08R\x18passphraseAlwaysOnDevice\x12T\n\rsafety_\ + checks\x18\t\x20\x01(\x0e2/.hw.trezor.messages.management.SafetyCheckLev\ + elR\x0csafetyChecks\x123\n\x15experimental_features\x18\n\x20\x01(\x08R\ + \x14experimentalFeatures\x129\n\x19hide_passphrase_from_host\x18\x0b\x20\ + \x01(\x08R\x16hidePassphraseFromHost\x12'\n\x0fhaptic_feedback\x18\r\x20\ + \x01(\x08R\x0ehapticFeedback\x12+\n\x11homescreen_length\x18\x0e\x20\x01\ + (\rR\x10homescreenLength\"T\n\x0eChangeLanguage\x12\x1f\n\x0bdata_length\ + \x18\x01\x20\x02(\rR\ndataLength\x12!\n\x0cshow_display\x18\x02\x20\x01(\ + \x08R\x0bshowDisplay\"T\n\x10DataChunkRequest\x12\x1f\n\x0bdata_length\ + \x18\x01\x20\x02(\rR\ndataLength\x12\x1f\n\x0bdata_offset\x18\x02\x20\ + \x02(\rR\ndataOffset\"-\n\x0cDataChunkAck\x12\x1d\n\ndata_chunk\x18\x01\ + \x20\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\x14\n\x05flags\x18\x01\ + \x20\x02(\rR\x05flags\"#\n\tChangePin\x12\x16\n\x06remove\x18\x01\x20\ + \x01(\x08R\x06remove\"(\n\x0eChangeWipeCode\x12\x16\n\x06remove\x18\x01\ + \x20\x01(\x08R\x06remove\"\xaa\x01\n\tSdProtect\x12]\n\toperation\x18\ + \x01\x20\x02(\x0e2?.hw.trezor.messages.management.SdProtect.SdProtectOpe\ + rationTypeR\toperation\">\n\x16SdProtectOperationType\x12\x0b\n\x07DISAB\ + LE\x10\0\x12\n\n\x06ENABLE\x10\x01\x12\x0b\n\x07REFRESH\x10\x02\"O\n\x04\ + Ping\x12\x1a\n\x07message\x18\x01\x20\x01(\t:\0R\x07message\x12+\n\x11bu\ + tton_protection\x18\x02\x20\x01(\x08R\x10buttonProtection\"\x08\n\x06Can\ + cel\"\x20\n\nGetEntropy\x12\x12\n\x04size\x18\x01\x20\x02(\rR\x04size\"#\ + \n\x07Entropy\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"/\n\ + \x0fGetFirmwareHash\x12\x1c\n\tchallenge\x18\x01\x20\x01(\x0cR\tchalleng\ + e\"\"\n\x0cFirmwareHash\x12\x12\n\x04hash\x18\x01\x20\x02(\x0cR\x04hash\ + \"2\n\x12AuthenticateDevice\x12\x1c\n\tchallenge\x18\x01\x20\x02(\x0cR\t\ + challenge\"U\n\x11AuthenticityProof\x12\"\n\x0ccertificates\x18\x01\x20\ + \x03(\x0cR\x0ccertificates\x12\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\ts\ + ignature\"\x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevice\x12\x1c\n\tmnemonic\ + s\x18\x01\x20\x03(\tR\tmnemonics\x12\x10\n\x03pin\x18\x03\x20\x01(\tR\ + \x03pin\x123\n\x15passphrase_protection\x18\x04\x20\x01(\x08R\x14passphr\ + aseProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\x02\ + \x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12#\n\rskip_ch\ + ecksum\x18\x07\x20\x01(\x08R\x0cskipChecksum\x12\x1f\n\x0bu2f_counter\ + \x18\x08\x20\x01(\rR\nu2fCounter\x12!\n\x0cneeds_backup\x18\t\x20\x01(\ + \x08R\x0bneedsBackup\x12\x1b\n\tno_backup\x18\n\x20\x01(\x08R\x08noBacku\ + p\"\x9d\x03\n\x0bResetDevice\x12\x1f\n\x08strength\x18\x02\x20\x01(\r:\ + \x03256R\x08strength\x123\n\x15passphrase_protection\x18\x03\x20\x01(\ + \x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\x04\x20\x01(\ + \x08R\rpinProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08langua\ + geB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12\x1f\ + \n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fCounter\x12\x1f\n\x0bskip_back\ + up\x18\x08\x20\x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\x20\x01(\ + \x08R\x08noBackup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw.trezor.m\ + essages.management.BackupType:\x05Bip39R\nbackupType\x12#\n\rentropy_che\ + ck\x18\x0b\x20\x01(\x08R\x0centropyCheckJ\x04\x08\x01\x10\x02\"\xe5\x01\ + \n\x0cBackupDevice\x12'\n\x0fgroup_threshold\x18\x01\x20\x01(\rR\x0egrou\ + pThreshold\x12O\n\x06groups\x18\x02\x20\x03(\x0b27.hw.trezor.messages.ma\ + nagement.BackupDevice.Slip39GroupR\x06groups\x1a[\n\x0bSlip39Group\x12)\ + \n\x10member_threshold\x18\x01\x20\x02(\rR\x0fmemberThreshold\x12!\n\x0c\ + member_count\x18\x02\x20\x02(\rR\x0bmemberCount\"b\n\x0eEntropyRequest\ + \x12-\n\x12entropy_commitment\x18\x01\x20\x01(\x0cR\x11entropyCommitment\ + \x12!\n\x0cprev_entropy\x18\x02\x20\x01(\x0cR\x0bprevEntropy\"&\n\nEntro\ + pyAck\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\x13\n\x11E\ + ntropyCheckReady\"5\n\x14EntropyCheckContinue\x12\x1d\n\x06finish\x18\ + \x01\x20\x01(\x08:\x05falseR\x06finish\"\x8d\x04\n\x0eRecoveryDevice\x12\ + \x1d\n\nword_count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passphrase_p\ + rotection\x18\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_pr\ + otection\x18\x03\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\ + \x04\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x05\x20\ + \x01(\tR\x05label\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\x08R\x0fen\ + forceWordlist\x12j\n\x0cinput_method\x18\x08\x20\x01(\x0e2G.hw.trezor.me\ + ssages.management.RecoveryDevice.RecoveryDeviceInputMethodR\x0binputMeth\ + od\x12\x1f\n\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12O\n\x04type\ + \x18\n\x20\x01(\x0e2+.hw.trezor.messages.management.RecoveryType:\x0eNor\ + malRecoveryR\x04type\";\n\x19RecoveryDeviceInputMethod\x12\x12\n\x0eScra\ + mbledWords\x10\0\x12\n\n\x06Matrix\x10\x01J\x04\x08\x07\x10\x08\"\xc5\ + \x01\n\x0bWordRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.trezor.me\ + ssages.management.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWordReque\ + stType\x12\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordRequest\ + Type_Matrix9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\"\x1d\ + \n\x07WordAck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04word\"0\n\rSetU2F\ + Counter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x13\n\ + \x11GetNextU2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_counter\ + \x18\x01\x20\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\x14P\ + reauthorizedRequest\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12Reboot\ + ToBootloader\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezor.mes\ + sages.management.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\x0bboot\ + Command\x12'\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmwareHeade\ + r\x123\n\x14language_data_length\x18\x03\x20\x01(\r:\x010R\x12languageDa\ + taLength\"5\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\ + \x0fINSTALL_UPGRADE\x10\x01\"\x10\n\x08GetNonce:\x04\x88\xb2\x19\x01\"#\ + \n\x05Nonce\x12\x14\n\x05nonce\x18\x01\x20\x02(\x0cR\x05nonce:\x04\x88\ + \xb2\x19\x01\";\n\nUnlockPath\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\ + \x08addressN\x12\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\x13Unloc\ + kedPathRequest\x12\x10\n\x03mac\x18\x01\x20\x02(\x0cR\x03mac\"\x14\n\x12\ + ShowDeviceTutorial\"\x12\n\x10UnlockBootloader\"%\n\rSetBrightness\x12\ + \x14\n\x05value\x18\x01\x20\x01(\rR\x05value*\x99\x01\n\nBackupType\x12\ + \t\n\x05Bip39\x10\0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fSlip3\ + 9_Advanced\x10\x02\x12\x1c\n\x18Slip39_Single_Extendable\x10\x03\x12\x1b\ + \n\x17Slip39_Basic_Extendable\x10\x04\x12\x1e\n\x1aSlip39_Advanced_Exten\ + dable\x10\x05*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\x12\x10\n\ + \x0cPromptAlways\x10\x01\x12\x15\n\x11PromptTemporarily\x10\x02*=\n\x0fD\ + isplayRotation\x12\t\n\x05North\x10\0\x12\x08\n\x04East\x10Z\x12\n\n\x05\ + South\x10\xb4\x01\x12\t\n\x04West\x10\x8e\x02*0\n\x10HomescreenFormat\ + \x12\x08\n\x04Toif\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04ToiG\ + \x10\x03*H\n\x0cRecoveryType\x12\x12\n\x0eNormalRecovery\x10\0\x12\n\n\ + \x06DryRun\x10\x01\x12\x18\n\x14UnlockRepeatedBackup\x10\x02BB\n#com.sat\ + oshilabs.trezor.lib.protobufB\x17TrezorMessageManagement\x80\xa6\x1d\x01\ "; /// `FileDescriptorProto` object which was a source for this generated file From 31ce7df9a3c180928b11996dc54101e82e30b00a Mon Sep 17 00:00:00 2001 From: Mykhailo Kremniov Date: Tue, 15 Jul 2025 22:51:01 +0300 Subject: [PATCH 3/3] Fix a deprecation warning --- python/src/trezorlib/mintlayer.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/python/src/trezorlib/mintlayer.py b/python/src/trezorlib/mintlayer.py index dc81574c12..58803b08e7 100644 --- a/python/src/trezorlib/mintlayer.py +++ b/python/src/trezorlib/mintlayer.py @@ -18,7 +18,7 @@ from typing import TYPE_CHECKING, Dict, List, Optional from . import messages -from .tools import expect, session +from .tools import session if TYPE_CHECKING: from .client import TrezorClient @@ -26,23 +26,22 @@ from .tools import Address -@expect(messages.MintlayerAddress, field="address", ret_type=str) def get_address( client: "TrezorClient", address_n: "Address", chain_type: int, show_display: bool = False, chunkify: bool = False, -) -> "MessageType": - +) -> str: return client.call( messages.MintlayerGetAddress( address_n=address_n, chain_type=messages.MintlayerChainType(chain_type), show_display=show_display, chunkify=chunkify, - ) - ) + ), + expect=messages.MintlayerAddress, + ).address def get_public_key(