diff --git a/tests/burn_tests/burntest_t1.py b/tests/burn_tests/burntest_t1.py index 841ecf131..ead2c315b 100755 --- a/tests/burn_tests/burntest_t1.py +++ b/tests/burn_tests/burntest_t1.py @@ -21,7 +21,7 @@ import random import string from trezorlib import device -from trezorlib.debuglink import TrezorClientDebugLink +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.transport import enumerate_devices, get_transport @@ -37,7 +37,7 @@ def get_device(): raise RuntimeError("No debuggable device found") -def pin_input_flow(client, old_pin, new_pin): +def pin_input_flow(client: Client, old_pin: str, new_pin: str): # do you want to change pin? yield client.debug.press_yes() @@ -55,7 +55,7 @@ def pin_input_flow(client, old_pin, new_pin): if __name__ == "__main__": wirelink = get_device() - client = TrezorClientDebugLink(wirelink) + client = Client(wirelink) client.open() i = 0 diff --git a/tests/burn_tests/burntest_t2.py b/tests/burn_tests/burntest_t2.py index e4667e636..5f1048254 100755 --- a/tests/burn_tests/burntest_t2.py +++ b/tests/burn_tests/burntest_t2.py @@ -21,7 +21,7 @@ import random import string from trezorlib import device -from trezorlib.debuglink import TrezorClientDebugLink +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.transport import enumerate_devices, get_transport @@ -37,7 +37,7 @@ def get_device(): raise RuntimeError("No debuggable device found") -def pin_input_flow(client, old_pin, new_pin): +def pin_input_flow(client: Client, old_pin: str, new_pin: str): # do you want to change pin? yield client.debug.press_yes() @@ -55,7 +55,7 @@ def pin_input_flow(client, old_pin, new_pin): if __name__ == "__main__": wirelink = get_device() - client = TrezorClientDebugLink(wirelink) + client = Client(wirelink) client.open() i = 0 diff --git a/tests/common.py b/tests/common.py index c8b252912..4ea5abab2 100644 --- a/tests/common.py +++ b/tests/common.py @@ -245,9 +245,7 @@ def get_test_address(client: "Client") -> str: return btc.get_address(client, "Testnet", TEST_ADDRESS_N) -def assert_tx_matches( - serialized_tx: bytes, hash_link: str, tx_hex: str = None -) -> None: +def assert_tx_matches(serialized_tx: bytes, hash_link: str, tx_hex: str = None) -> None: """Verifies if a transaction is correctly formed.""" hash_str = hash_link.split("/")[-1] assert tools.tx_hash(serialized_tx).hex() == hash_str diff --git a/tests/conftest.py b/tests/conftest.py index bfd381a8e..3645cafa8 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -20,7 +20,7 @@ from typing import TYPE_CHECKING import pytest from trezorlib import debuglink, log -from trezorlib.debuglink import TrezorClientDebugLink +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.device import apply_settings, wipe as wipe_device from trezorlib.transport import enumerate_devices, get_transport @@ -38,13 +38,13 @@ pytest.register_assert_rewrite("tests.common") @pytest.fixture(scope="session") -def _raw_client(request: pytest.FixtureRequest) -> TrezorClientDebugLink: +def _raw_client(request: pytest.FixtureRequest) -> Client: path = os.environ.get("TREZOR_PATH") interact = int(os.environ.get("INTERACT", 0)) if path: try: transport = get_transport(path) - return TrezorClientDebugLink(transport, auto_interact=not interact) + return Client(transport, auto_interact=not interact) except Exception as e: request.session.shouldstop = "Failed to communicate with Trezor" raise RuntimeError(f"Failed to open debuglink for {path}") from e @@ -53,7 +53,7 @@ def _raw_client(request: pytest.FixtureRequest) -> TrezorClientDebugLink: devices = enumerate_devices() for device in devices: try: - return TrezorClientDebugLink(device, auto_interact=not interact) + return Client(device, auto_interact=not interact) except Exception: pass @@ -62,9 +62,7 @@ def _raw_client(request: pytest.FixtureRequest) -> TrezorClientDebugLink: @pytest.fixture(scope="function") -def client( - request: pytest.FixtureRequest, _raw_client: TrezorClientDebugLink -) -> TrezorClientDebugLink: +def client(request: pytest.FixtureRequest, _raw_client: Client) -> Client: """Client fixture. Every test function that requires a client instance will get it from here. @@ -298,9 +296,7 @@ def pytest_runtest_makereport(item: pytest.Item, call) -> None: @pytest.fixture -def device_handler( - client: TrezorClientDebugLink, request: pytest.FixtureRequest -) -> None: +def device_handler(client: Client, request: pytest.FixtureRequest) -> None: device_handler = BackgroundDeviceHandler(client) yield device_handler diff --git a/tests/device_handler.py b/tests/device_handler.py index 3ad14ed92..047f6c451 100644 --- a/tests/device_handler.py +++ b/tests/device_handler.py @@ -6,7 +6,7 @@ from trezorlib.transport import udp if TYPE_CHECKING: from trezorlib.messages import Features - from trezorlib.debuglink import TrezorClientDebugLink, DebugLink + from trezorlib.debuglink import DebugLink, TrezorClientDebugLink as Client from trezorlib._internal.emulator import Emulator @@ -33,11 +33,11 @@ class NullUI: class BackgroundDeviceHandler: _pool = ThreadPoolExecutor() - def __init__(self, client: "TrezorClientDebugLink") -> None: + def __init__(self, client: "Client") -> None: self._configure_client(client) self.task = None - def _configure_client(self, client: "TrezorClientDebugLink") -> None: + def _configure_client(self, client: "Client") -> None: self.client = client self.client.ui = NullUI # type: ignore [NullUI is OK UI] self.client.watch_layout(True) diff --git a/tests/device_tests/binance/test_get_address.py b/tests/device_tests/binance/test_get_address.py index 3aa19b290..28aac5c81 100644 --- a/tests/device_tests/binance/test_get_address.py +++ b/tests/device_tests/binance/test_get_address.py @@ -17,11 +17,12 @@ import pytest from trezorlib.binance import get_address +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path BINANCE_ADDRESS_TEST_VECTORS = [ - ("m/44'/714'/0'/0/0", "bnb1hgm0p7khfk85zpz5v0j8wnej3a90w709vhkdfu"), - ("m/44'/714'/0'/0/1", "bnb1egswqkszzfc2uq78zjslc6u2uky4pw46x4rstd"), + ("m/44h/714h/0h/0/0", "bnb1hgm0p7khfk85zpz5v0j8wnej3a90w709vhkdfu"), + ("m/44h/714h/0h/0/1", "bnb1egswqkszzfc2uq78zjslc6u2uky4pw46x4rstd"), ] @@ -32,7 +33,7 @@ BINANCE_ADDRESS_TEST_VECTORS = [ mnemonic="offer caution gift cross surge pretty orange during eye soldier popular holiday mention east eight office fashion ill parrot vault rent devote earth cousin" ) @pytest.mark.parametrize("path, expected_address", BINANCE_ADDRESS_TEST_VECTORS) -def test_binance_get_address(client, path, expected_address): +def test_binance_get_address(client: Client, path, expected_address): # data from https://github.com/binance-chain/javascript-sdk/blob/master/__tests__/crypto.test.js#L50 address = get_address(client, parse_path(path), show_display=True) diff --git a/tests/device_tests/binance/test_get_public_key.py b/tests/device_tests/binance/test_get_public_key.py index 7830ef0e4..08e75f5da 100644 --- a/tests/device_tests/binance/test_get_public_key.py +++ b/tests/device_tests/binance/test_get_public_key.py @@ -17,6 +17,7 @@ import pytest from trezorlib import binance +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path BINANCE_PATH = parse_path("m/44h/714h/0h/0/0") @@ -28,7 +29,7 @@ BINANCE_PATH = parse_path("m/44h/714h/0h/0/0") @pytest.mark.setup_client( mnemonic="offer caution gift cross surge pretty orange during eye soldier popular holiday mention east eight office fashion ill parrot vault rent devote earth cousin" ) -def test_binance_get_public_key(client): +def test_binance_get_public_key(client: Client): sig = binance.get_public_key(client, BINANCE_PATH, show_display=True) assert ( sig.hex() diff --git a/tests/device_tests/binance/test_sign_tx.py b/tests/device_tests/binance/test_sign_tx.py index b7da21d0c..25b0dff99 100644 --- a/tests/device_tests/binance/test_sign_tx.py +++ b/tests/device_tests/binance/test_sign_tx.py @@ -17,6 +17,7 @@ import pytest from trezorlib import binance +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path BINANCE_TEST_VECTORS = [ @@ -107,8 +108,8 @@ BINANCE_TEST_VECTORS = [ mnemonic="offer caution gift cross surge pretty orange during eye soldier popular holiday mention east eight office fashion ill parrot vault rent devote earth cousin" ) @pytest.mark.parametrize("message, expected_response", BINANCE_TEST_VECTORS) -def test_binance_sign_message(client, message, expected_response): - response = binance.sign_tx(client, parse_path("m/44'/714'/0'/0/0"), message) +def test_binance_sign_message(client: Client, message, expected_response): + response = binance.sign_tx(client, parse_path("m/44h/714h/0h/0/0"), message) assert response.public_key.hex() == expected_response["public_key"] diff --git a/tests/device_tests/bitcoin/test_authorize_coinjoin.py b/tests/device_tests/bitcoin/test_authorize_coinjoin.py index 54ad8613a..5e2bebd53 100644 --- a/tests/device_tests/bitcoin/test_authorize_coinjoin.py +++ b/tests/device_tests/bitcoin/test_authorize_coinjoin.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -49,7 +50,7 @@ pytestmark = pytest.mark.skip_t1 @pytest.mark.setup_client(pin=PIN) -def test_sign_tx(client): +def test_sign_tx(client: Client): commitment_data = b"www.example.com" + (1).to_bytes(ROUND_ID_LEN, "big") with client: @@ -57,9 +58,9 @@ def test_sign_tx(client): btc.authorize_coinjoin( client, coordinator="www.example.com", - max_total_fee=10010, - fee_per_anonymity=5000000, # 0.005 % - n=parse_path("m/84'/1'/0'"), + max_total_fee=10_010, + fee_per_anonymity=5_000_000, # 0.005 % + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -73,7 +74,7 @@ def test_sign_tx(client): btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=commitment_data, @@ -87,7 +88,7 @@ def test_sign_tx(client): btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/5"), + parse_path("m/84h/1h/0h/1/5"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=commitment_data, @@ -99,7 +100,7 @@ def test_sign_tx(client): # seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle" # 84'/1'/0'/0/0 # tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2 - amount=100000, + amount=100_000, prev_hash=TXHASH_e5b7e2, prev_index=0, script_type=messages.InputScriptType.EXTERNAL, @@ -110,8 +111,8 @@ def test_sign_tx(client): commitment_data=commitment_data, ), messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, @@ -122,30 +123,30 @@ def test_sign_tx(client): # Other's coinjoined output. messages.TxOutputType( address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml", - amount=50000, + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Our coinjoined output. messages.TxOutputType( # tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d - address_n=parse_path("84'/1'/0'/1/1"), - amount=50000, + address_n=parse_path("m/84h/1h/0h/1/1"), + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Our change output. messages.TxOutputType( # tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx - address_n=parse_path("84'/1'/0'/1/2"), - amount=7289000 - 50000 - 5 - 5000, + address_n=parse_path("m/84h/1h/0h/1/2"), + amount=7_289_000 - 50_000 - 5 - 5_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Other's change output. messages.TxOutputType( address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", - amount=100000 - 50000 - 5 - 5000, + amount=100_000 - 50_000 - 5 - 5_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), @@ -241,16 +242,16 @@ def test_sign_tx(client): ) -def test_unfair_fee(client): +def test_unfair_fee(client: Client): # Test unfair mining fee distribution amongst participants. with client: btc.authorize_coinjoin( client, coordinator="www.example.com", - max_total_fee=10000, - fee_per_anonymity=5000000, # 0.005 % - n=parse_path("m/84'/1'/0'"), + max_total_fee=10_000, + fee_per_anonymity=5_000_000, # 0.005 % + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -260,7 +261,7 @@ def test_unfair_fee(client): # seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle" # 84'/1'/0'/0/0 # tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2 - amount=100000, + amount=100_000, prev_hash=TXHASH_e5b7e2, prev_index=0, script_type=messages.InputScriptType.EXTERNAL, @@ -271,8 +272,8 @@ def test_unfair_fee(client): commitment_data=b"www.example.org" + (1).to_bytes(ROUND_ID_LEN, "big"), ), messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, @@ -283,30 +284,30 @@ def test_unfair_fee(client): # Other's coinjoined output. messages.TxOutputType( address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml", - amount=50000, + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Our coinjoined output. messages.TxOutputType( # tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d - address_n=parse_path("84'/1'/0'/1/1"), - amount=50000, + address_n=parse_path("m/84h/1h/0h/1/1"), + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Our change output. messages.TxOutputType( # tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx - address_n=parse_path("84'/1'/0'/1/2"), - amount=7289000 - 50000 - 5 - 6000, # unfair mining fee + address_n=parse_path("m/84h/1h/0h/1/2"), + amount=7_289_000 - 50_000 - 5 - 6_000, # unfair mining fee script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Other's change output. messages.TxOutputType( address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", - amount=100000 - 50000 - 5 - 4000, + amount=100_000 - 50_000 - 5 - 4_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), @@ -342,16 +343,16 @@ def test_unfair_fee(client): ) -def test_no_anonymity(client): +def test_no_anonymity(client: Client): # Test CoinJoin transaction giving the user's outputs no gain in anonymity. with client: btc.authorize_coinjoin( client, coordinator="www.example.com", - max_total_fee=5005, - fee_per_anonymity=5000000, # 0.005 % - n=parse_path("m/84'/1'/0'"), + max_total_fee=5_005, + fee_per_anonymity=5_000_000, # 0.005 % + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -361,7 +362,7 @@ def test_no_anonymity(client): # seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle" # 84'/1'/0'/0/0 # tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2 - amount=100000, + amount=100_000, prev_hash=TXHASH_e5b7e2, prev_index=0, script_type=messages.InputScriptType.EXTERNAL, @@ -372,8 +373,8 @@ def test_no_anonymity(client): commitment_data=b"www.example.org" + (1).to_bytes(ROUND_ID_LEN, "big"), ), messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, @@ -384,45 +385,45 @@ def test_no_anonymity(client): # Other's coinjoined output. messages.TxOutputType( address="tb1qk7j3ahs2v6hrv4v282cf0tvxh0vqq7rpt3zcml", - amount=30000, + amount=30_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Other's coinjoined output. messages.TxOutputType( address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", - amount=30000, + amount=30_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Our coinjoined output. messages.TxOutputType( # tb1qze76uzqteg6un6jfcryrxhwvfvjj58ts0swg3d - address_n=parse_path("84'/1'/0'/1/1"), - amount=50000, + address_n=parse_path("m/84h/1h/0h/1/1"), + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Our coinjoined output. messages.TxOutputType( # tb1qr5p6f5sk09sms57ket074vywfymuthlgud7xyx - address_n=parse_path("84'/1'/0'/1/2"), - amount=50000, + address_n=parse_path("m/84h/1h/0h/1/2"), + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Our change output. messages.TxOutputType( # tb1qwn0s88t9r39g72m78mcaxj72sy3ct4m404xsmq - address_n=parse_path("84'/1'/0'/1/3"), - amount=7289000 - 50000 - 50000 - 10 - 5000, + address_n=parse_path("m/84h/1h/0h/1/3"), + amount=7_289_000 - 50_000 - 50_000 - 10 - 5_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), # Other's change output. messages.TxOutputType( address="tb1q9cqhdr9ydetjzrct6tyeuccws9505hl96azwxk", - amount=100000 - 30000 - 30000 - 6 - 5000, + amount=100_000 - 30_000 - 30_000 - 6 - 5_000, script_type=messages.OutputScriptType.PAYTOWITNESS, payment_req_index=0, ), @@ -459,14 +460,14 @@ def test_no_anonymity(client): ) -def test_wrong_coordinator(client): +def test_wrong_coordinator(client: Client): # Ensure that a preauthorized GetOwnershipProof fails if the commitment_data doesn't match the coordinator. btc.authorize_coinjoin( client, - max_total_fee=50000, + max_total_fee=50_000, coordinator="www.example.com", - n=parse_path("m/84'/1'/0'"), + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -475,7 +476,7 @@ def test_wrong_coordinator(client): btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example.org" + (1).to_bytes(ROUND_ID_LEN, "big"), @@ -483,14 +484,14 @@ def test_wrong_coordinator(client): ) -def test_cancel_authorization(client): +def test_cancel_authorization(client: Client): # Ensure that a preauthorized GetOwnershipProof fails if the commitment_data doesn't match the coordinator. btc.authorize_coinjoin( client, - max_total_fee=50000, + max_total_fee=50_000, coordinator="www.example.com", - n=parse_path("m/84'/1'/0'"), + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -501,7 +502,7 @@ def test_cancel_authorization(client): btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example.com" + (1).to_bytes(ROUND_ID_LEN, "big"), @@ -509,13 +510,13 @@ def test_cancel_authorization(client): ) -def test_multisession_authorization(client): +def test_multisession_authorization(client: Client): # Authorize CoinJoin with www.example1.com in session 1. btc.authorize_coinjoin( client, - max_total_fee=50000, + max_total_fee=50_000, coordinator="www.example1.com", - n=parse_path("m/84'/1'/0'"), + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -527,9 +528,9 @@ def test_multisession_authorization(client): # Authorize CoinJoin with www.example2.com in session 2. btc.authorize_coinjoin( client, - max_total_fee=50000, + max_total_fee=50_000, coordinator="www.example2.com", - n=parse_path("m/84'/1'/0'"), + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -539,7 +540,7 @@ def test_multisession_authorization(client): ownership_proof, _ = btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example1.com" + (1).to_bytes(ROUND_ID_LEN, "big"), @@ -550,7 +551,7 @@ def test_multisession_authorization(client): ownership_proof, _ = btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example2.com" + (1).to_bytes(ROUND_ID_LEN, "big"), @@ -570,7 +571,7 @@ def test_multisession_authorization(client): ownership_proof, _ = btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example1.com" + (1).to_bytes(ROUND_ID_LEN, "big"), @@ -587,7 +588,7 @@ def test_multisession_authorization(client): ownership_proof, _ = btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example2.com" + (1).to_bytes(ROUND_ID_LEN, "big"), @@ -602,7 +603,7 @@ def test_multisession_authorization(client): ownership_proof, _ = btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example1.com" + (1).to_bytes(ROUND_ID_LEN, "big"), @@ -616,7 +617,7 @@ def test_multisession_authorization(client): ownership_proof, _ = btc.get_ownership_proof( client, "Testnet", - parse_path("84'/1'/0'/1/0"), + parse_path("m/84h/1h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"www.example2.com" + (1).to_bytes(ROUND_ID_LEN, "big"), diff --git a/tests/device_tests/bitcoin/test_bcash.py b/tests/device_tests/bitcoin/test_bcash.py index 43815b45b..07849c728 100644 --- a/tests/device_tests/bitcoin/test_bcash.py +++ b/tests/device_tests/bitcoin/test_bcash.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path @@ -42,23 +43,23 @@ TXHASH_8b6db9 = bytes.fromhex( pytestmark = pytest.mark.altcoin -def test_send_bch_change(client): +def test_send_bch_change(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/145'/0'/0/0"), + address_n=parse_path("m/44h/145h/0h/0/0"), # bitcoincash:qr08q88p9etk89wgv05nwlrkm4l0urz4cyl36hh9sv - amount=1995344, + amount=1_995_344, prev_hash=TXHASH_bc37c2, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( - address_n=parse_path("44'/145'/0'/1/0"), - amount=1896050, + address_n=parse_path("m/44h/145h/0h/1/0"), + amount=1_896_050, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4", - amount=73452, + amount=73_452, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: @@ -89,26 +90,26 @@ def test_send_bch_change(client): ) -def test_send_bch_nochange(client): +def test_send_bch_nochange(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/145'/0'/1/0"), + address_n=parse_path("m/44h/145h/0h/1/0"), # bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw - amount=1896050, + amount=1_896_050, prev_hash=TXHASH_502e85, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) inp2 = messages.TxInputType( - address_n=parse_path("44'/145'/0'/0/1"), + address_n=parse_path("m/44h/145h/0h/0/1"), # bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4 - amount=73452, + amount=73_452, prev_hash=TXHASH_502e85, prev_index=1, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( address="bitcoincash:qq6wnnkrz7ykaqvxrx4hmjvayvzjzml54uyk76arx4", - amount=1934960, + amount=1_934_960, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: @@ -145,26 +146,26 @@ def test_send_bch_nochange(client): ) -def test_send_bch_oldaddr(client): +def test_send_bch_oldaddr(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/145'/0'/1/0"), + address_n=parse_path("m/44h/145h/0h/1/0"), # bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw - amount=1896050, + amount=1_896_050, prev_hash=TXHASH_502e85, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) inp2 = messages.TxInputType( - address_n=parse_path("44'/145'/0'/0/1"), + address_n=parse_path("m/44h/145h/0h/0/1"), # bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4 - amount=73452, + amount=73_452, prev_hash=TXHASH_502e85, prev_index=1, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( address="15pnEDZJo3ycPUamqP3tEDnEju1oW5fBCz", - amount=1934960, + amount=1_934_960, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: @@ -201,22 +202,22 @@ def test_send_bch_oldaddr(client): ) -def test_attack_change_input(client): +def test_attack_change_input(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/145'/10'/0/0"), - amount=1995344, + address_n=parse_path("m/44h/145h/10h/0/0"), + amount=1_995_344, prev_hash=TXHASH_bc37c2, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( - address_n=parse_path("44'/145'/10'/1/0"), - amount=1896050, + address_n=parse_path("m/44h/145h/10h/1/0"), + amount=1_896_050, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4", - amount=73452, + amount=73_452, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -255,10 +256,10 @@ def test_attack_change_input(client): @pytest.mark.multisig -def test_send_bch_multisig_wrongchange(client): +def test_send_bch_multisig_wrongchange(client: Client): nodes = [ btc.get_public_node( - client, parse_path(f"48'/145'/{i}'/0'"), coin_name="Bcash" + client, parse_path(f"m/48h/145h/{i}h/0h"), coin_name="Bcash" ).node for i in range(1, 4) ] @@ -283,16 +284,16 @@ def test_send_bch_multisig_wrongchange(client): "304402207274b5a4d15e75f3df7319a375557b0efba9b27bc63f9f183a17da95a6125c94022000efac57629f1522e2d3958430e2ef073b0706cfac06cce492651b79858f09ae" ) inp1 = messages.TxInputType( - address_n=parse_path("48'/145'/1'/0'/1/0"), + address_n=parse_path("m/48h/145h/1h/0h/1/0"), multisig=getmultisig(1, 0, [b"", sig, b""]), # bitcoincash:pp6kcpkhua7789g2vyj0qfkcux3yvje7euhyhltn0a - amount=24000, + amount=24_000, prev_hash=TXHASH_f68caf, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, ) out1 = messages.TxOutputType( - address_n=parse_path("48'/145'/1'/0'/1/1"), + address_n=parse_path("m/48h/145h/1h/0h/1/1"), multisig=messages.MultisigRedeemScriptType( pubkeys=[ messages.HDNodePathType(node=nodes[0], address_n=[1, 1]), @@ -303,7 +304,7 @@ def test_send_bch_multisig_wrongchange(client): m=2, ), script_type=messages.OutputScriptType.PAYTOMULTISIG, - amount=23000, + amount=23_000, ) with client: client.set_expected_responses( @@ -336,10 +337,10 @@ def test_send_bch_multisig_wrongchange(client): @pytest.mark.multisig -def test_send_bch_multisig_change(client): +def test_send_bch_multisig_change(client: Client): nodes = [ btc.get_public_node( - client, parse_path(f"48'/145'/{i}'/0'"), coin_name="Bcash" + client, parse_path(f"m/48h/145h/{i}h/0h"), coin_name="Bcash" ).node for i in range(1, 4) ] @@ -352,23 +353,23 @@ def test_send_bch_multisig_change(client): ) inp1 = messages.TxInputType( - address_n=parse_path("48'/145'/3'/0'/0/0"), + address_n=parse_path("m/48h/145h/3h/0h/0/0"), multisig=getmultisig(0, 0, EMPTY_SIGNATURES), - amount=48490, + amount=48_490, prev_hash=TXHASH_8b6db9, prev_index=0, script_type=messages.InputScriptType.SPENDMULTISIG, ) out1 = messages.TxOutputType( address="bitcoincash:qqq8gx2j76nw4dfefumxmdwvtf2tpsjznusgsmzex9", - amount=24000, + amount=24_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("48'/145'/3'/0'/1/0"), + address_n=parse_path("m/48h/145h/3h/0h/1/0"), multisig=getmultisig(1, 0, EMPTY_SIGNATURES), script_type=messages.OutputScriptType.PAYTOMULTISIG, - amount=24000, + amount=24_000, ) with client: client.set_expected_responses( @@ -398,10 +399,10 @@ def test_send_bch_multisig_change(client): ) inp1 = messages.TxInputType( - address_n=parse_path("48'/145'/1'/0'/0/0"), + address_n=parse_path("m/48h/145h/1h/0h/0/0"), multisig=getmultisig(0, 0, [b"", b"", signatures1[0]]), # bitcoincash:pqguz4nqq64jhr5v3kvpq4dsjrkda75hwy86gq0qzw - amount=48490, + amount=48_490, prev_hash=TXHASH_8b6db9, prev_index=0, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -441,11 +442,11 @@ def test_send_bch_multisig_change(client): @pytest.mark.skip_t1 -def test_send_bch_external_presigned(client): +def test_send_bch_external_presigned(client: Client): inp1 = messages.TxInputType( # address_n=parse_path("44'/145'/0'/1/0"), # bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw - amount=1896050, + amount=1_896_050, prev_hash=TXHASH_502e85, prev_index=0, script_type=messages.InputScriptType.EXTERNAL, @@ -457,16 +458,16 @@ def test_send_bch_external_presigned(client): ), ) inp2 = messages.TxInputType( - address_n=parse_path("44'/145'/0'/0/1"), + address_n=parse_path("m/44h/145h/0h/0/1"), # bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4 - amount=73452, + amount=73_452, prev_hash=TXHASH_502e85, prev_index=1, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( address="bitcoincash:qq6wnnkrz7ykaqvxrx4hmjvayvzjzml54uyk76arx4", - amount=1934960, + amount=1_934_960, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: diff --git a/tests/device_tests/bitcoin/test_bgold.py b/tests/device_tests/bitcoin/test_bgold.py index 6f3bb45a0..3775bcf6f 100644 --- a/tests/device_tests/bitcoin/test_bgold.py +++ b/tests/device_tests/bitcoin/test_bgold.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, btc_hash, parse_path @@ -40,22 +41,22 @@ pytestmark = pytest.mark.altcoin # All data taken from T1 -def test_send_bitcoin_gold_change(client): +def test_send_bitcoin_gold_change(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/156'/0'/0/0"), - amount=1252382934, + address_n=parse_path("m/44h/156h/0h/0/0"), + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( - address_n=parse_path("44'/156'/0'/1/0"), - amount=1896050, + address_n=parse_path("m/44h/156h/0h/1/0"), + amount=1_896_050, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=1252382934 - 1896050 - 1000, + amount=1_252_382_934 - 1_896_050 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: @@ -87,25 +88,25 @@ def test_send_bitcoin_gold_change(client): ) -def test_send_bitcoin_gold_nochange(client): +def test_send_bitcoin_gold_nochange(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/156'/0'/1/0"), - amount=1252382934, + address_n=parse_path("m/44h/156h/0h/1/0"), + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) inp2 = messages.TxInputType( - address_n=parse_path("44'/156'/0'/0/1"), + address_n=parse_path("m/44h/156h/0h/0/1"), # 1LRspCZNFJcbuNKQkXgHMDucctFRQya5a3 - amount=38448607, + amount=38_448_607, prev_hash=TXHASH_db77c2, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=1252382934 + 38448607 - 1000, + amount=1_252_382_934 + 38_448_607 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: @@ -142,22 +143,22 @@ def test_send_bitcoin_gold_nochange(client): ) -def test_attack_change_input(client): +def test_attack_change_input(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/156'/11'/0/0"), - amount=1252382934, + address_n=parse_path("m/44h/156h/11h/0/0"), + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( - address_n=parse_path("44'/156'/11'/1/0"), - amount=1896050, + address_n=parse_path("m/44h/156h/11h/1/0"), + amount=1_896_050, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=1252382934 - 1896050 - 1000, + amount=1_252_382_934 - 1_896_050 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -197,10 +198,10 @@ def test_attack_change_input(client): @pytest.mark.multisig -def test_send_btg_multisig_change(client): +def test_send_btg_multisig_change(client: Client): nodes = [ btc.get_public_node( - client, parse_path(f"48'/156'/{i}'/0'"), coin_name="Bgold" + client, parse_path(f"m/48h/156h/{i}h/0h"), coin_name="Bgold" ).node for i in range(1, 4) ] @@ -213,24 +214,24 @@ def test_send_btg_multisig_change(client): ) inp1 = messages.TxInputType( - address_n=parse_path("48'/156'/3'/0'/0/0"), + address_n=parse_path("m/48h/156h/3h/0h/0/0"), multisig=getmultisig(0, 0, EMPTY_SIGS), # 33Ju286QvonBz5N1V754ZekQv4GLJqcc5R - amount=1252382934, + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDMULTISIG, ) out1 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=24000, + amount=24_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("48'/156'/3'/0'/1/0"), + address_n=parse_path("m/48h/156h/3h/0h/1/0"), multisig=getmultisig(1, 0, EMPTY_SIGS), script_type=messages.OutputScriptType.PAYTOMULTISIG, - amount=1252382934 - 24000 - 1000, + amount=1_252_382_934 - 24_000 - 1_000, ) with client: client.set_expected_responses( @@ -261,9 +262,9 @@ def test_send_btg_multisig_change(client): ) inp1 = messages.TxInputType( - address_n=parse_path("48'/156'/1'/0'/0/0"), + address_n=parse_path("m/48h/156h/1h/0h/0/0"), multisig=getmultisig(0, 0, [b"", b"", signatures[0]]), - amount=1252382934, + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -303,23 +304,23 @@ def test_send_btg_multisig_change(client): ) -def test_send_p2sh(client): +def test_send_p2sh(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/156'/0'/1/0"), - amount=1252382934, + address_n=parse_path("m/49h/156h/0h/1/0"), + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="GZFLExxrvWFuFT1xRzhfwQWSE2bPDedBfn", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=1252382934 - 11000 - 12300000, + amount=1_252_382_934 - 11_000 - 12_300_000, ) with client: client.set_expected_responses( @@ -352,23 +353,23 @@ def test_send_p2sh(client): ) -def test_send_p2sh_witness_change(client): +def test_send_p2sh_witness_change(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/156'/0'/1/0"), - amount=1252382934, + address_n=parse_path("m/49h/156h/0h/1/0"), + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("49'/156'/0'/1/0"), + address_n=parse_path("m/49h/156h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, - amount=1252382934 - 11000 - 12300000, + amount=1_252_382_934 - 11_000 - 12_300_000, ) with client: client.set_expected_responses( @@ -401,10 +402,10 @@ def test_send_p2sh_witness_change(client): @pytest.mark.multisig -def test_send_multisig_1(client): +def test_send_multisig_1(client: Client): nodes = [ btc.get_public_node( - client, parse_path(f"49'/156'/{i}'"), coin_name="Bgold" + client, parse_path(f"m/49h/156h/{i}h"), coin_name="Bgold" ).node for i in range(1, 4) ] @@ -413,17 +414,17 @@ def test_send_multisig_1(client): ) inp1 = messages.TxInputType( - address_n=parse_path("49'/156'/1'/1/0"), + address_n=parse_path("m/49h/156h/1h/1/0"), prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, multisig=multisig, - amount=1252382934, + amount=1_252_382_934, ) out1 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=1252382934 - 1000, + amount=1_252_382_934 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -477,26 +478,26 @@ def test_send_multisig_1(client): ) -def test_send_mixed_inputs(client): +def test_send_mixed_inputs(client: Client): # First is non-segwit, second is segwit. inp1 = messages.TxInputType( - address_n=parse_path("44'/156'/11'/0/0"), - amount=38448607, + address_n=parse_path("m/44h/156h/11h/0/0"), + amount=38_448_607, prev_hash=TXHASH_db77c2, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, ) inp2 = messages.TxInputType( - address_n=parse_path("49'/156'/0'/1/0"), - amount=1252382934, + address_n=parse_path("m/49h/156h/0h/1/0"), + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=38448607 + 1252382934 - 1000, + amount=38_448_607 + 1_252_382_934 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -512,10 +513,10 @@ def test_send_mixed_inputs(client): @pytest.mark.skip_t1 -def test_send_btg_external_presigned(client): +def test_send_btg_external_presigned(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/156'/0'/1/0"), - amount=1252382934, + address_n=parse_path("m/44h/156h/0h/1/0"), + amount=1_252_382_934, prev_hash=TXHASH_25526b, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, @@ -523,7 +524,7 @@ def test_send_btg_external_presigned(client): inp2 = messages.TxInputType( # address_n=parse_path("49'/156'/0'/0/0"), # AXibjT5r96ZaVA8Lu4BQZocdTx7p5Ud8ZP - amount=58456, + amount=58_456, prev_hash=TXHASH_f55c5b, prev_index=0, script_type=messages.InputScriptType.EXTERNAL, @@ -535,7 +536,7 @@ def test_send_btg_external_presigned(client): ) out1 = messages.TxOutputType( address="GfDB1tvjfm3bukeoBTtfNqrJVFohS2kCTe", - amount=1252382934 + 58456 - 1000, + amount=1_252_382_934 + 58_456 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: diff --git a/tests/device_tests/bitcoin/test_dash.py b/tests/device_tests/bitcoin/test_dash.py index ad2bf37e2..af60f6079 100644 --- a/tests/device_tests/bitcoin/test_dash.py +++ b/tests/device_tests/bitcoin/test_dash.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...tx_cache import TxCache @@ -41,18 +42,18 @@ TXHASH_15575a = bytes.fromhex( pytestmark = pytest.mark.altcoin -def test_send_dash(client): +def test_send_dash(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/5'/0'/0/0"), + address_n=parse_path("m/44h/5h/0h/0/0"), # dash:XdTw4G5AWW4cogGd7ayybyBNDbuB45UpgH - amount=1000000000, + amount=1_000_000_000, prev_hash=TXHASH_5579ea, prev_index=1, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( address="XpTc36DPAeWmaueNBA9JqCg2GC8XDLKSYe", - amount=999999000, + amount=999_999_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: @@ -82,23 +83,23 @@ def test_send_dash(client): ) -def test_send_dash_dip2_input(client): +def test_send_dash_dip2_input(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/5'/0'/0/0"), + address_n=parse_path("m/44h/5h/0h/0/0"), # dash:XdTw4G5AWW4cogGd7ayybyBNDbuB45UpgH - amount=4095000260, + amount=4_095_000_260, prev_hash=TXHASH_15575a, prev_index=1, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( - address_n=parse_path("44'/5'/0'/1/0"), - amount=4000000000, + address_n=parse_path("m/44h/5h/0h/1/0"), + amount=4_000_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="XrEFMNkxeipYHgEQKiJuqch8XzwrtfH5fm", - amount=95000000, + amount=95_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: diff --git a/tests/device_tests/bitcoin/test_decred.py b/tests/device_tests/bitcoin/test_decred.py index c75d2cdbb..187964042 100644 --- a/tests/device_tests/bitcoin/test_decred.py +++ b/tests/device_tests/bitcoin/test_decred.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...tx_cache import TxCache @@ -54,20 +55,20 @@ TXHASH_1f00fc = bytes.fromhex( pytestmark = [pytest.mark.altcoin, pytest.mark.decred] -def test_send_decred(client): +def test_send_decred(client: Client): inp1 = messages.TxInputType( # TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz - address_n=parse_path("m/44'/1'/0'/0/0"), + address_n=parse_path("m/44h/1h/0h/0/0"), prev_hash=TXHASH_e16248, prev_index=1, - amount=200000000, + amount=200_000_000, script_type=messages.InputScriptType.SPENDADDRESS, decred_tree=0, ) out1 = messages.TxOutputType( address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz", - amount=190000000, + amount=190_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -99,12 +100,12 @@ def test_send_decred(client): @pytest.mark.skip_t1 -def test_purchase_ticket_decred(client): +def test_purchase_ticket_decred(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("m/44'/1'/0'/0/0"), + address_n=parse_path("m/44h/1h/0h/0/0"), prev_hash=TXHASH_e16248, prev_index=1, - amount=200000000, + amount=200_000_000, decred_tree=0, script_type=messages.InputScriptType.SPENDADDRESS, ) @@ -112,11 +113,11 @@ def test_purchase_ticket_decred(client): out1 = messages.TxOutputType( address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=199900000, + amount=199_900_000, ) out2 = messages.TxOutputType( - address_n=parse_path("m/44'/1'/0'/0/0"), - amount=200000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=200_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out3 = messages.TxOutputType( @@ -159,22 +160,22 @@ def test_purchase_ticket_decred(client): @pytest.mark.skip_t1 -def test_spend_from_stake_generation_and_revocation_decred(client): +def test_spend_from_stake_generation_and_revocation_decred(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("m/44'/1'/0'/0/0"), + address_n=parse_path("m/44h/1h/0h/0/0"), prev_hash=TXHASH_8b6890, prev_index=2, - amount=200000000, + amount=200_000_000, script_type=messages.InputScriptType.SPENDADDRESS, decred_staking_spend=messages.DecredStakingSpendType.SSGen, decred_tree=1, ) inp2 = messages.TxInputType( - address_n=parse_path("m/44'/1'/0'/0/0"), + address_n=parse_path("m/44h/1h/0h/0/0"), prev_hash=TXHASH_1f00fc, prev_index=0, - amount=200000000, + amount=200_000_000, script_type=messages.InputScriptType.SPENDADDRESS, decred_staking_spend=messages.DecredStakingSpendType.SSRTX, decred_tree=1, @@ -182,7 +183,7 @@ def test_spend_from_stake_generation_and_revocation_decred(client): out1 = messages.TxOutputType( address="TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz", - amount=399900000, + amount=399_900_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -220,11 +221,11 @@ def test_spend_from_stake_generation_and_revocation_decred(client): ) -def test_send_decred_change(client): +def test_send_decred_change(client: Client): inp1 = messages.TxInputType( # TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz - address_n=parse_path("m/44'/1'/0'/0/0"), - amount=190000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=190_000_000, prev_hash=TXHASH_5e6e35, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, @@ -233,8 +234,8 @@ def test_send_decred_change(client): inp2 = messages.TxInputType( # TscqTv1he8MZrV321SfRghw7LFBCJDKB3oz - address_n=parse_path("m/44'/1'/0'/0/0"), - amount=200000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=200_000_000, prev_hash=TXHASH_ccf95b, prev_index=1, script_type=messages.InputScriptType.SPENDADDRESS, @@ -243,8 +244,8 @@ def test_send_decred_change(client): inp3 = messages.TxInputType( # Tskt39YEvzoJ5KBDH4f1auNzG3jViVjZ2RV - address_n=parse_path("m/44'/1'/0'/0/1"), - amount=200000000, + address_n=parse_path("m/44h/1h/0h/0/1"), + amount=200_000_000, prev_hash=TXHASH_f395ef, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, @@ -253,14 +254,14 @@ def test_send_decred_change(client): out1 = messages.TxOutputType( address="TsWjioPrP8E1TuTMmTrVMM2BA4iPrjQXBpR", - amount=489975000, + amount=489_975_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( # TsaSFRwfN9muW5F6ZX36iSksc9hruiC5F97 - address_n=parse_path("m/44'/1'/0'/1/0"), - amount=100000000, + address_n=parse_path("m/44h/1h/0h/1/0"), + amount=100_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -309,8 +310,8 @@ def test_send_decred_change(client): @pytest.mark.multisig -def test_decred_multisig_change(client): - paths = [parse_path(f"m/48'/1'/{index}'/0'") for index in range(3)] +def test_decred_multisig_change(client: Client): + paths = [parse_path(f"m/48h/1h/{index}h/0h") for index in range(3)] nodes = [ btc.get_public_node(client, address_n, coin_name="Decred Testnet").node for address_n in paths @@ -332,7 +333,7 @@ def test_decred_multisig_change(client): address_n=address_n, # TchpthUkRys1VQWgnQyLJNaA4MLBjVmRL2c multisig=multisig, - amount=200000000, + amount=200_000_000, prev_hash=TXHASH_3f7c39, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -344,7 +345,7 @@ def test_decred_multisig_change(client): address_n=address_n, # TcnfDEfMhkM3oLWqiq9v9GmYgLK7qfjitKG multisig=multisig, - amount=200000000, + amount=200_000_000, prev_hash=TXHASH_16da18, prev_index=0, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -356,13 +357,13 @@ def test_decred_multisig_change(client): address_n=address_n, # TcrrURA3Bzj4isGU48PdSP9SDoU5oCpjEcb multisig=multisig, - amount=99900000, + amount=99_900_000, script_type=messages.OutputScriptType.PAYTOMULTISIG, ) out2 = messages.TxOutputType( address="TsWjioPrP8E1TuTMmTrVMM2BA4iPrjQXBpR", - amount=300000000, + amount=300_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) diff --git a/tests/device_tests/bitcoin/test_descriptors.py b/tests/device_tests/bitcoin/test_descriptors.py index e0873b39b..fb6ebd0b6 100644 --- a/tests/device_tests/bitcoin/test_descriptors.py +++ b/tests/device_tests/bitcoin/test_descriptors.py @@ -18,6 +18,7 @@ import pytest from trezorlib import messages from trezorlib.cli import btc +from trezorlib.debuglink import TrezorClientDebugLink as Client VECTORS_DESCRIPTORS = ( # coin, account, script_type, descriptors ( @@ -120,6 +121,6 @@ VECTORS_DESCRIPTORS = ( # coin, account, script_type, descriptors @pytest.mark.parametrize("coin, account, script_type, descriptors", VECTORS_DESCRIPTORS) -def test_descriptors(client, coin, account, script_type, descriptors): +def test_descriptors(client: Client, coin, account, script_type, descriptors): res = btc._get_descriptor(client, coin, account, script_type, show_display=True) assert res == descriptors diff --git a/tests/device_tests/bitcoin/test_firo.py b/tests/device_tests/bitcoin/test_firo.py index 8f16beb87..28ab6a4fb 100644 --- a/tests/device_tests/bitcoin/test_firo.py +++ b/tests/device_tests/bitcoin/test_firo.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import btc_hash, parse_path from ...tx_cache import TxCache @@ -28,10 +29,10 @@ TXHASH_8a34cc = bytes.fromhex( @pytest.mark.altcoin -def test_spend_lelantus(client): +def test_spend_lelantus(client: Client): inp1 = messages.TxInputType( # THgGLVqfzJcaxRVPWE5fd8YJ1GpVePq2Uk - address_n=parse_path("m/44'/1'/0'/0/4"), + address_n=parse_path("m/44h/1h/0h/0/4"), amount=1_000_000_000, prev_hash=TXHASH_8a34cc, prev_index=0, diff --git a/tests/device_tests/bitcoin/test_fujicoin.py b/tests/device_tests/bitcoin/test_fujicoin.py index 24b8f84c7..7cde7e757 100644 --- a/tests/device_tests/bitcoin/test_fujicoin.py +++ b/tests/device_tests/bitcoin/test_fujicoin.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path TXHASH_33043a = bytes.fromhex( @@ -26,11 +27,11 @@ TXHASH_33043a = bytes.fromhex( pytestmark = pytest.mark.altcoin -def test_send_p2tr(client): +def test_send_p2tr(client: Client): inp1 = messages.TxInputType( # fc1prr07akly3xjtmggue0p04vghr8pdcgxrye2s00sahptwjeawxrkq2rxzr7 - address_n=parse_path("86'/75'/0'/0/1"), - amount=99997780000, + address_n=parse_path("m/86h/75h/0h/0/1"), + amount=99_997_780_000, prev_hash=TXHASH_33043a, prev_index=0, script_type=messages.InputScriptType.SPENDTAPROOT, @@ -38,7 +39,7 @@ def test_send_p2tr(client): out1 = messages.TxOutputType( # 86'/75'/0'/0/0 address="fc1pxax0eaemn9fg2vfwvnz8wr2fjtr5e8junp50vx3yvx8aauv0hcvql824ml", - amount=99996670000, + amount=99_996_670_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) _, serialized_tx = btc.sign_tx(client, "Fujicoin", [inp1], [out1]) diff --git a/tests/device_tests/bitcoin/test_getaddress.py b/tests/device_tests/bitcoin/test_getaddress.py index 9b28174bf..54d3bea20 100644 --- a/tests/device_tests/bitcoin/test_getaddress.py +++ b/tests/device_tests/bitcoin/test_getaddress.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import SafetyCheckLevel from trezorlib.tools import parse_path @@ -33,112 +34,112 @@ def getmultisig(chain, nr, xpubs): ) -def test_btc(client): +def test_btc(client: Client): assert ( - btc.get_address(client, "Bitcoin", parse_path("m/44'/0'/0'/0/0")) + btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/0/0")) == "1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL" ) assert ( - btc.get_address(client, "Bitcoin", parse_path("m/44'/0'/0'/0/1")) + btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/0/1")) == "1GWFxtwWmNVqotUPXLcKVL2mUKpshuJYo" ) assert ( - btc.get_address(client, "Bitcoin", parse_path("m/44'/0'/0'/1/0")) + btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/1/0")) == "1DyHzbQUoQEsLxJn6M7fMD8Xdt1XvNiwNE" ) @pytest.mark.altcoin -def test_ltc(client): +def test_ltc(client: Client): assert ( - btc.get_address(client, "Litecoin", parse_path("m/44'/2'/0'/0/0")) + btc.get_address(client, "Litecoin", parse_path("m/44h/2h/0h/0/0")) == "LcubERmHD31PWup1fbozpKuiqjHZ4anxcL" ) assert ( - btc.get_address(client, "Litecoin", parse_path("m/44'/2'/0'/0/1")) + btc.get_address(client, "Litecoin", parse_path("m/44h/2h/0h/0/1")) == "LVWBmHBkCGNjSPHucvL2PmnuRAJnucmRE6" ) assert ( - btc.get_address(client, "Litecoin", parse_path("m/44'/2'/0'/1/0")) + btc.get_address(client, "Litecoin", parse_path("m/44h/2h/0h/1/0")) == "LWj6ApswZxay4cJEJES2sGe7fLMLRvvv8h" ) -def test_tbtc(client): +def test_tbtc(client: Client): assert ( - btc.get_address(client, "Testnet", parse_path("m/44'/1'/0'/0/0")) + btc.get_address(client, "Testnet", parse_path("m/44h/1h/0h/0/0")) == "mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q" ) assert ( - btc.get_address(client, "Testnet", parse_path("m/44'/1'/0'/0/1")) + btc.get_address(client, "Testnet", parse_path("m/44h/1h/0h/0/1")) == "mopZWqZZyQc3F2Sy33cvDtJchSAMsnLi7b" ) assert ( - btc.get_address(client, "Testnet", parse_path("m/44'/1'/0'/1/0")) + btc.get_address(client, "Testnet", parse_path("m/44h/1h/0h/1/0")) == "mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ" ) @pytest.mark.altcoin -def test_bch(client): +def test_bch(client: Client): assert ( - btc.get_address(client, "Bcash", parse_path("44'/145'/0'/0/0")) + btc.get_address(client, "Bcash", parse_path("m/44h/145h/0h/0/0")) == "bitcoincash:qr08q88p9etk89wgv05nwlrkm4l0urz4cyl36hh9sv" ) assert ( - btc.get_address(client, "Bcash", parse_path("44'/145'/0'/0/1")) + btc.get_address(client, "Bcash", parse_path("m/44h/145h/0h/0/1")) == "bitcoincash:qr23ajjfd9wd73l87j642puf8cad20lfmqdgwvpat4" ) assert ( - btc.get_address(client, "Bcash", parse_path("44'/145'/0'/1/0")) + btc.get_address(client, "Bcash", parse_path("m/44h/145h/0h/1/0")) == "bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw" ) @pytest.mark.altcoin -def test_grs(client): +def test_grs(client: Client): assert ( - btc.get_address(client, "Groestlcoin", parse_path("44'/17'/0'/0/0")) + btc.get_address(client, "Groestlcoin", parse_path("m/44h/17h/0h/0/0")) == "Fj62rBJi8LvbmWu2jzkaUX1NFXLEqDLoZM" ) assert ( - btc.get_address(client, "Groestlcoin", parse_path("44'/17'/0'/1/0")) + btc.get_address(client, "Groestlcoin", parse_path("m/44h/17h/0h/1/0")) == "FmRaqvVBRrAp2Umfqx9V1ectZy8gw54QDN" ) assert ( - btc.get_address(client, "Groestlcoin", parse_path("44'/17'/0'/1/1")) + btc.get_address(client, "Groestlcoin", parse_path("m/44h/17h/0h/1/1")) == "Fmhtxeh7YdCBkyQF7AQG4QnY8y3rJg89di" ) @pytest.mark.altcoin -def test_tgrs(client): +def test_tgrs(client: Client): assert ( - btc.get_address(client, "Groestlcoin Testnet", parse_path("44'/1'/0'/0/0")) + btc.get_address(client, "Groestlcoin Testnet", parse_path("m/44h/1h/0h/0/0")) == "mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y" ) assert ( - btc.get_address(client, "Groestlcoin Testnet", parse_path("44'/1'/0'/1/0")) + btc.get_address(client, "Groestlcoin Testnet", parse_path("m/44h/1h/0h/1/0")) == "mm6kLYbGEL1tGe4ZA8xacfgRPdW1LMq8cN" ) assert ( - btc.get_address(client, "Groestlcoin Testnet", parse_path("44'/1'/0'/1/1")) + btc.get_address(client, "Groestlcoin Testnet", parse_path("m/44h/1h/0h/1/1")) == "mjXZwmEi1z1MzveZrKUAo4DBgbdq6ZhGD6" ) @pytest.mark.altcoin -def test_elements(client): +def test_elements(client: Client): assert ( - btc.get_address(client, "Elements", parse_path("m/44'/1'/0'/0/0")) + btc.get_address(client, "Elements", parse_path("m/44h/1h/0h/0/0")) == "2dpWh6jbhAowNsQ5agtFzi7j6nKscj6UnEr" ) @pytest.mark.skip_t1 -def test_address_mac(client): +def test_address_mac(client: Client): resp = btc.get_authenticated_address( - client, "Bitcoin", parse_path("m/44'/0'/0'/1/0") + client, "Bitcoin", parse_path("m/44h/0h/0h/1/0") ) assert resp.address == "1DyHzbQUoQEsLxJn6M7fMD8Xdt1XvNiwNE" assert ( @@ -147,7 +148,7 @@ def test_address_mac(client): ) resp = btc.get_authenticated_address( - client, "Testnet", parse_path("m/44'/1'/0'/1/0") + client, "Testnet", parse_path("m/44h/1h/0h/1/0") ) assert resp.address == "mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ" assert ( @@ -157,16 +158,16 @@ def test_address_mac(client): # Script type mismatch. resp = btc.get_authenticated_address( - client, "Bitcoin", parse_path("84'/0'/0'/0/0"), show_display=False + client, "Bitcoin", parse_path("m/84h/0h/0h/0/0"), show_display=False ) assert resp.mac is None @pytest.mark.skip_t1 @pytest.mark.altcoin -def test_altcoin_address_mac(client): +def test_altcoin_address_mac(client: Client): resp = btc.get_authenticated_address( - client, "Litecoin", parse_path("m/44'/2'/0'/1/0") + client, "Litecoin", parse_path("m/44h/2h/0h/1/0") ) assert resp.address == "LWj6ApswZxay4cJEJES2sGe7fLMLRvvv8h" assert ( @@ -174,7 +175,9 @@ def test_altcoin_address_mac(client): == "eaf47182d7ae17d2046ec2e204bc5b67477db20a5eaea3cec5393c25664bc4d2" ) - resp = btc.get_authenticated_address(client, "Bcash", parse_path("44'/145'/0'/1/0")) + resp = btc.get_authenticated_address( + client, "Bcash", parse_path("m/44h/145h/0h/1/0") + ) assert resp.address == "bitcoincash:qzc5q87w069lzg7g3gzx0c8dz83mn7l02scej5aluw" assert ( resp.mac.hex() @@ -182,7 +185,7 @@ def test_altcoin_address_mac(client): ) resp = btc.get_authenticated_address( - client, "Groestlcoin", parse_path("44'/17'/0'/1/1") + client, "Groestlcoin", parse_path("m/44h/17h/0h/1/1") ) assert resp.address == "Fmhtxeh7YdCBkyQF7AQG4QnY8y3rJg89di" assert ( @@ -192,10 +195,10 @@ def test_altcoin_address_mac(client): @pytest.mark.multisig -def test_multisig(client): +def test_multisig(client: Client): xpubs = [] for n in range(1, 4): - node = btc.get_public_node(client, parse_path(f"44'/0'/{n}'")) + node = btc.get_public_node(client, parse_path(f"m/44h/0h/{n}h")) xpubs.append(node.xpub) for nr in range(1, 4): @@ -203,7 +206,7 @@ def test_multisig(client): btc.get_address( client, "Bitcoin", - parse_path(f"44'/0'/{nr}'/0/0"), + parse_path(f"m/44h/0h/{nr}h/0/0"), show_display=(nr == 1), multisig=getmultisig(0, 0, xpubs=xpubs), ) @@ -213,7 +216,7 @@ def test_multisig(client): btc.get_address( client, "Bitcoin", - parse_path(f"44'/0'/{nr}'/1/0"), + parse_path(f"m/44h/0h/{nr}h/1/0"), show_display=(nr == 1), multisig=getmultisig(1, 0, xpubs=xpubs), ) @@ -223,12 +226,12 @@ def test_multisig(client): @pytest.mark.multisig @pytest.mark.parametrize("show_display", (True, False)) -def test_multisig_missing(client, show_display): +def test_multisig_missing(client: Client, show_display): # Multisig with global suffix specification. # Use account numbers 1, 2 and 3 to create a valid multisig, # but not containing the keys from account 0 used below. nodes = [ - btc.get_public_node(client, parse_path(f"44'/0'/{i}'")).node + btc.get_public_node(client, parse_path(f"m/44h/0h/{i}h")).node for i in range(1, 4) ] multisig1 = messages.MultisigRedeemScriptType( @@ -237,7 +240,7 @@ def test_multisig_missing(client, show_display): # Multisig with per-node suffix specification. node = btc.get_public_node( - client, parse_path("44h/0h/0h/0"), coin_name="Bitcoin" + client, parse_path("m/44h/0h/0h/0"), coin_name="Bitcoin" ).node multisig2 = messages.MultisigRedeemScriptType( @@ -255,7 +258,7 @@ def test_multisig_missing(client, show_display): btc.get_address( client, "Bitcoin", - parse_path("44'/0'/0'/0/0"), + parse_path("m/44h/0h/0h/0/0"), show_display=show_display, multisig=multisig, ) @@ -263,11 +266,11 @@ def test_multisig_missing(client, show_display): @pytest.mark.altcoin @pytest.mark.multisig -def test_bch_multisig(client): +def test_bch_multisig(client: Client): xpubs = [] for n in range(1, 4): node = btc.get_public_node( - client, parse_path(f"44'/145'/{n}'"), coin_name="Bcash" + client, parse_path(f"m/44h/145h/{n}h"), coin_name="Bcash" ) xpubs.append(node.xpub) @@ -276,7 +279,7 @@ def test_bch_multisig(client): btc.get_address( client, "Bcash", - parse_path(f"44'/145'/{nr}'/0/0"), + parse_path(f"m/44h/145h/{nr}h/0/0"), show_display=(nr == 1), multisig=getmultisig(0, 0, xpubs=xpubs), ) @@ -286,7 +289,7 @@ def test_bch_multisig(client): btc.get_address( client, "Bcash", - parse_path(f"44'/145'/{nr}'/1/0"), + parse_path(f"m/44h/145h/{nr}h/1/0"), show_display=(nr == 1), multisig=getmultisig(1, 0, xpubs=xpubs), ) @@ -294,31 +297,31 @@ def test_bch_multisig(client): ) -def test_public_ckd(client): - node = btc.get_public_node(client, parse_path("m/44'/0'/0'")).node - node_sub1 = btc.get_public_node(client, parse_path("m/44'/0'/0'/1/0")).node +def test_public_ckd(client: Client): + node = btc.get_public_node(client, parse_path("m/44h/0h/0h")).node + node_sub1 = btc.get_public_node(client, parse_path("m/44h/0h/0h/1/0")).node node_sub2 = bip32.public_ckd(node, [1, 0]) assert node_sub1.chain_code == node_sub2.chain_code assert node_sub1.public_key == node_sub2.public_key - address1 = btc.get_address(client, "Bitcoin", parse_path("m/44'/0'/0'/1/0")) + address1 = btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/1/0")) address2 = bip32.get_address(node_sub2, 0) assert address2 == "1DyHzbQUoQEsLxJn6M7fMD8Xdt1XvNiwNE" assert address1 == address2 -def test_invalid_path(client): +def test_invalid_path(client: Client): with pytest.raises(TrezorFailure, match="Forbidden key path"): # slip44 id mismatch btc.get_address( - client, "Bitcoin", parse_path("m/44'/111'/0'/0/0"), show_display=True + client, "Bitcoin", parse_path("m/44h/111h/0h/0/0"), show_display=True ) -def test_unknown_path(client): - UNKNOWN_PATH = parse_path("m/44'/9'/0'/0/0") +def test_unknown_path(client: Client): + UNKNOWN_PATH = parse_path("m/44h/9h/0h/0/0") with client: client.set_expected_responses([messages.Failure]) @@ -349,8 +352,8 @@ def test_unknown_path(client): @pytest.mark.altcoin -def test_crw(client): +def test_crw(client: Client): assert ( - btc.get_address(client, "Crown", parse_path("44'/72'/0'/0/0")) + btc.get_address(client, "Crown", parse_path("m/44h/72h/0h/0/0")) == "CRWYdvZM1yXMKQxeN3hRsAbwa7drfvTwys48" ) diff --git a/tests/device_tests/bitcoin/test_getaddress_segwit.py b/tests/device_tests/bitcoin/test_getaddress_segwit.py index baa3f7a43..76e09a81f 100644 --- a/tests/device_tests/bitcoin/test_getaddress_segwit.py +++ b/tests/device_tests/bitcoin/test_getaddress_segwit.py @@ -17,16 +17,17 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path -def test_show_segwit(client): +def test_show_segwit(client: Client): assert ( btc.get_address( client, "Testnet", - parse_path("49'/1'/0'/1/0"), + parse_path("m/49h/1h/0h/1/0"), True, None, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -37,7 +38,7 @@ def test_show_segwit(client): btc.get_address( client, "Testnet", - parse_path("49'/1'/0'/0/0"), + parse_path("m/49h/1h/0h/0/0"), False, None, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -48,7 +49,7 @@ def test_show_segwit(client): btc.get_address( client, "Testnet", - parse_path("44'/1'/0'/0/0"), + parse_path("m/44h/1h/0h/0/0"), False, None, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -59,7 +60,7 @@ def test_show_segwit(client): btc.get_address( client, "Testnet", - parse_path("44'/1'/0'/0/0"), + parse_path("m/44h/1h/0h/0/0"), False, None, script_type=messages.InputScriptType.SPENDADDRESS, @@ -69,12 +70,12 @@ def test_show_segwit(client): @pytest.mark.altcoin -def test_show_segwit_altcoin(client): +def test_show_segwit_altcoin(client: Client): assert ( btc.get_address( client, "Groestlcoin Testnet", - parse_path("49'/1'/0'/1/0"), + parse_path("m/49h/1h/0h/1/0"), True, None, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -85,7 +86,7 @@ def test_show_segwit_altcoin(client): btc.get_address( client, "Groestlcoin Testnet", - parse_path("49'/1'/0'/0/0"), + parse_path("m/49h/1h/0h/0/0"), True, None, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -96,7 +97,7 @@ def test_show_segwit_altcoin(client): btc.get_address( client, "Groestlcoin Testnet", - parse_path("44'/1'/0'/0/0"), + parse_path("m/44h/1h/0h/0/0"), True, None, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -107,7 +108,7 @@ def test_show_segwit_altcoin(client): btc.get_address( client, "Groestlcoin Testnet", - parse_path("44'/1'/0'/0/0"), + parse_path("m/44h/1h/0h/0/0"), True, None, script_type=messages.InputScriptType.SPENDADDRESS, @@ -118,7 +119,7 @@ def test_show_segwit_altcoin(client): btc.get_address( client, "Elements", - parse_path("m/49'/1'/0'/0/0"), + parse_path("m/49h/1h/0h/0/0"), True, None, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -128,10 +129,10 @@ def test_show_segwit_altcoin(client): @pytest.mark.multisig -def test_show_multisig_3(client): +def test_show_multisig_3(client: Client): nodes = [ btc.get_public_node( - client, parse_path(f"49'/1'/{i}'"), coin_name="Testnet" + client, parse_path(f"m/49h/1h/{i}h"), coin_name="Testnet" ).node for i in range(1, 4) ] @@ -149,7 +150,7 @@ def test_show_multisig_3(client): btc.get_address( client, "Testnet", - parse_path(f"49'/1'/{i}'/0/7"), + parse_path(f"m/49h/1h/{i}h/0/7"), False, multisig1, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -160,12 +161,12 @@ def test_show_multisig_3(client): @pytest.mark.multisig @pytest.mark.parametrize("show_display", (True, False)) -def test_multisig_missing(client, show_display): +def test_multisig_missing(client: Client, show_display): # Multisig with global suffix specification. # Use account numbers 1, 2 and 3 to create a valid multisig, # but not containing the keys from account 0 used below. nodes = [ - btc.get_public_node(client, parse_path(f"49'/0'/{i}'")).node + btc.get_public_node(client, parse_path(f"m/49h/0h/{i}h")).node for i in range(1, 4) ] multisig1 = messages.MultisigRedeemScriptType( @@ -174,7 +175,7 @@ def test_multisig_missing(client, show_display): # Multisig with per-node suffix specification. node = btc.get_public_node( - client, parse_path("49h/0h/0h/0"), coin_name="Bitcoin" + client, parse_path("m/49h/0h/0h/0"), coin_name="Bitcoin" ).node multisig2 = messages.MultisigRedeemScriptType( pubkeys=[ @@ -191,7 +192,7 @@ def test_multisig_missing(client, show_display): btc.get_address( client, "Bitcoin", - parse_path("49'/0'/0'/0/0"), + parse_path("m/49h/0h/0h/0/0"), show_display=show_display, multisig=multisig, script_type=messages.InputScriptType.SPENDP2SHWITNESS, diff --git a/tests/device_tests/bitcoin/test_getaddress_segwit_native.py b/tests/device_tests/bitcoin/test_getaddress_segwit_native.py index 3805ded31..ae6f3eda0 100644 --- a/tests/device_tests/bitcoin/test_getaddress_segwit_native.py +++ b/tests/device_tests/bitcoin/test_getaddress_segwit_native.py @@ -17,103 +17,104 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path VECTORS = ( # coin, path, script_type, address ( "Testnet", - "84'/1'/0'/0/0", + "m/84h/1h/0h/0/0", messages.InputScriptType.SPENDWITNESS, "tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9", ), ( "Testnet", - "84'/1'/0'/1/0", + "m/84h/1h/0h/1/0", messages.InputScriptType.SPENDWITNESS, "tb1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt96jk9x", ), ( "Bitcoin", - "84'/0'/0'/0/0", + "m/84h/0h/0h/0/0", messages.InputScriptType.SPENDWITNESS, "bc1qannfxke2tfd4l7vhepehpvt05y83v3qsf6nfkk", ), ( "Bitcoin", - "84'/0'/0'/1/0", + "m/84h/0h/0h/1/0", messages.InputScriptType.SPENDWITNESS, "bc1qktmhrsmsenepnnfst8x6j27l0uqv7ggrg8x38q", ), ( "Testnet", - "86'/1'/0'/0/0", + "m/86h/1h/0h/0/0", messages.InputScriptType.SPENDTAPROOT, "tb1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq8s8a5u", ), ( "Testnet", - "86'/1'/0'/1/0", + "m/86h/1h/0h/1/0", messages.InputScriptType.SPENDTAPROOT, "tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c", ), ( "Bitcoin", - "86'/0'/0'/0/0", + "m/86h/0h/0h/0/0", messages.InputScriptType.SPENDTAPROOT, "bc1ptxs597p3fnpd8gwut5p467ulsydae3rp9z75hd99w8k3ljr9g9rqx6ynaw", ), ( "Bitcoin", - "86'/0'/0'/1/0", + "m/86h/0h/0h/1/0", messages.InputScriptType.SPENDTAPROOT, "bc1pgypgja2hmcx2l6s2ssq75k6ev68ved6nujcspt47dgvkp8euc70s6uegk6", ), pytest.param( "Groestlcoin Testnet", - "84'/1'/0'/0/0", + "m/84h/1h/0h/0/0", messages.InputScriptType.SPENDWITNESS, "tgrs1qkvwu9g3k2pdxewfqr7syz89r3gj557l3ued7ja", marks=pytest.mark.altcoin, ), pytest.param( "Groestlcoin Testnet", - "84'/1'/0'/1/0", + "m/84h/1h/0h/1/0", messages.InputScriptType.SPENDWITNESS, "tgrs1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt9lkd57", marks=pytest.mark.altcoin, ), pytest.param( "Groestlcoin", - "84'/17'/0'/0/0", + "m/84h/17h/0h/0/0", messages.InputScriptType.SPENDWITNESS, "grs1qw4teyraux2s77nhjdwh9ar8rl9dt7zww8r6lne", marks=pytest.mark.altcoin, ), pytest.param( "Groestlcoin", - "84'/17'/0'/1/0", + "m/84h/17h/0h/1/0", messages.InputScriptType.SPENDWITNESS, "grs1qzfpwn55tvkxcw0xwfa0g8k2gtlzlgkcq3z000e", marks=pytest.mark.altcoin, ), pytest.param( "Groestlcoin Testnet", - "86'/1'/0'/0/0", + "m/86h/1h/0h/0/0", messages.InputScriptType.SPENDTAPROOT, "tgrs1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq5v2q7z", marks=pytest.mark.altcoin, ), pytest.param( "Groestlcoin", - "86'/17'/0'/0/0", + "m/86h/17h/0h/0/0", messages.InputScriptType.SPENDTAPROOT, "grs1pnacleslusvh6gdjd3j2y5kv3drq09038sww2zx4za68jssndmu6qkm698g", marks=pytest.mark.altcoin, ), pytest.param( "Elements", - "84'/1'/0'/0/0", + "m/84h/1h/0h/0/0", messages.InputScriptType.SPENDWITNESS, "ert1qkvwu9g3k2pdxewfqr7syz89r3gj557l3xp9k2v", marks=pytest.mark.altcoin, @@ -122,15 +123,24 @@ VECTORS = ( # coin, path, script_type, address BIP86_VECTORS = ( # path, address for "abandon ... abandon about" seed - ("86'/0'/0'/0/0", "bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr"), - ("86'/0'/0'/0/1", "bc1p4qhjn9zdvkux4e44uhx8tc55attvtyu358kutcqkudyccelu0was9fqzwh"), - ("86'/0'/0'/1/0", "bc1p3qkhfews2uk44qtvauqyr2ttdsw7svhkl9nkm9s9c3x4ax5h60wqwruhk7"), + ( + "m/86h/0h/0h/0/0", + "bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr", + ), + ( + "m/86h/0h/0h/0/1", + "bc1p4qhjn9zdvkux4e44uhx8tc55attvtyu358kutcqkudyccelu0was9fqzwh", + ), + ( + "m/86h/0h/0h/1/0", + "bc1p3qkhfews2uk44qtvauqyr2ttdsw7svhkl9nkm9s9c3x4ax5h60wqwruhk7", + ), ) @pytest.mark.parametrize("show_display", (True, False)) @pytest.mark.parametrize("coin, path, script_type, address", VECTORS) -def test_show_segwit(client, show_display, coin, path, script_type, address): +def test_show_segwit(client: Client, show_display, coin, path, script_type, address): assert ( btc.get_address( client, @@ -149,7 +159,7 @@ def test_show_segwit(client, show_display, coin, path, script_type, address): mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" ) @pytest.mark.parametrize("path, address", BIP86_VECTORS) -def test_bip86(client, path, address): +def test_bip86(client: Client, path, address): assert ( btc.get_address( client, @@ -164,10 +174,10 @@ def test_bip86(client, path, address): @pytest.mark.multisig -def test_show_multisig_3(client): +def test_show_multisig_3(client: Client): nodes = [ btc.get_public_node( - client, parse_path(f"84'/1'/{index}'"), coin_name="Testnet" + client, parse_path(f"m/84h/1h/{index}h"), coin_name="Testnet" ).node for index in range(1, 4) ] @@ -182,7 +192,7 @@ def test_show_multisig_3(client): btc.get_address( client, "Testnet", - parse_path(f"84'/1'/{i}'/0/1"), + parse_path(f"m/84h/1h/{i}h/0/1"), False, multisig2, script_type=messages.InputScriptType.SPENDWITNESS, @@ -193,7 +203,7 @@ def test_show_multisig_3(client): btc.get_address( client, "Testnet", - parse_path(f"84'/1'/{i}'/0/0"), + parse_path(f"m/84h/1h/{i}h/0/0"), False, multisig1, script_type=messages.InputScriptType.SPENDWITNESS, @@ -204,12 +214,12 @@ def test_show_multisig_3(client): @pytest.mark.multisig @pytest.mark.parametrize("show_display", (True, False)) -def test_multisig_missing(client, show_display): +def test_multisig_missing(client: Client, show_display): # Multisig with global suffix specification. # Use account numbers 1, 2 and 3 to create a valid multisig, # but not containing the keys from account 0 used below. nodes = [ - btc.get_public_node(client, parse_path(f"84'/0'/{i}'")).node + btc.get_public_node(client, parse_path(f"m/84h/0h/{i}h")).node for i in range(1, 4) ] multisig1 = messages.MultisigRedeemScriptType( @@ -218,7 +228,7 @@ def test_multisig_missing(client, show_display): # Multisig with per-node suffix specification. node = btc.get_public_node( - client, parse_path("84h/0h/0h/0"), coin_name="Bitcoin" + client, parse_path("m/84h/0h/0h/0"), coin_name="Bitcoin" ).node multisig2 = messages.MultisigRedeemScriptType( pubkeys=[ @@ -235,7 +245,7 @@ def test_multisig_missing(client, show_display): btc.get_address( client, "Bitcoin", - parse_path("84'/0'/0'/0/0"), + parse_path("m/84h/0h/0h/0/0"), show_display=show_display, multisig=multisig, script_type=messages.InputScriptType.SPENDWITNESS, diff --git a/tests/device_tests/bitcoin/test_getaddress_show.py b/tests/device_tests/bitcoin/test_getaddress_show.py index dc84f19ad..570758783 100644 --- a/tests/device_tests/bitcoin/test_getaddress_show.py +++ b/tests/device_tests/bitcoin/test_getaddress_show.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages, tools +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure VECTORS = ( # path, script_type, address @@ -39,7 +40,7 @@ VECTORS = ( # path, script_type, address @pytest.mark.parametrize("path, script_type, address", VECTORS) -def test_show(client, path, script_type, address): +def test_show(client: Client, path, script_type, address): assert ( btc.get_address( client, @@ -52,7 +53,7 @@ def test_show(client, path, script_type, address): ) -def test_show_unrecognized_path(client): +def test_show_unrecognized_path(client: Client): with pytest.raises(TrezorFailure): btc.get_address( client, @@ -64,9 +65,9 @@ def test_show_unrecognized_path(client): @pytest.mark.multisig -def test_show_multisig_3(client): +def test_show_multisig_3(client: Client): node = btc.get_public_node( - client, tools.parse_path("45h/0/0"), coin_name="Bitcoin" + client, tools.parse_path("m/45h/0/0"), coin_name="Bitcoin" ).node multisig = messages.MultisigRedeemScriptType( pubkeys=[ @@ -83,7 +84,7 @@ def test_show_multisig_3(client): btc.get_address( client, "Bitcoin", - tools.parse_path(f"45h/0/0/{i}"), + tools.parse_path(f"m/45h/0/0/{i}"), show_display=True, multisig=multisig, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -173,7 +174,7 @@ def test_show_multisig_xpubs( nodes = [ btc.get_public_node( client, - tools.parse_path(f"48h/0h/{i}h/{bip48_type}h"), + tools.parse_path(f"m/48h/0h/{i}h/{bip48_type}h"), coin_name="Bitcoin", ) for i in range(3) @@ -235,7 +236,7 @@ def test_show_multisig_xpubs( btc.get_address( client, "Bitcoin", - tools.parse_path(f"48h/0h/{i}h/{bip48_type}h/0/0"), + tools.parse_path(f"m/48h/0h/{i}h/{bip48_type}h/0/0"), show_display=True, multisig=multisig, script_type=script_type, @@ -244,9 +245,9 @@ def test_show_multisig_xpubs( @pytest.mark.multisig -def test_show_multisig_15(client): +def test_show_multisig_15(client: Client): node = btc.get_public_node( - client, tools.parse_path("45h/0/0"), coin_name="Bitcoin" + client, tools.parse_path("m/45h/0/0"), coin_name="Bitcoin" ).node pubs = [messages.HDNodePathType(node=node, address_n=[x]) for x in range(15)] @@ -260,7 +261,7 @@ def test_show_multisig_15(client): btc.get_address( client, "Bitcoin", - tools.parse_path(f"45h/0/0/{i}"), + tools.parse_path(f"m/45h/0/0/{i}"), show_display=True, multisig=multisig, script_type=messages.InputScriptType.SPENDMULTISIG, diff --git a/tests/device_tests/bitcoin/test_getownershipproof.py b/tests/device_tests/bitcoin/test_getownershipproof.py index cfe584d69..b5b6b454d 100644 --- a/tests/device_tests/bitcoin/test_getownershipproof.py +++ b/tests/device_tests/bitcoin/test_getownershipproof.py @@ -17,17 +17,18 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path pytestmark = pytest.mark.skip_t1 -def test_p2wpkh_ownership_id(client): +def test_p2wpkh_ownership_id(client: Client): ownership_id = btc.get_ownership_id( client, "Bitcoin", - parse_path("m/84'/0'/0'/1/0"), + parse_path("m/84h/0h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, ) assert ( @@ -36,11 +37,11 @@ def test_p2wpkh_ownership_id(client): ) -def test_p2tr_ownership_id(client): +def test_p2tr_ownership_id(client: Client): ownership_id = btc.get_ownership_id( client, "Bitcoin", - parse_path("m/86'/0'/0'/1/0"), + parse_path("m/86h/0h/0h/1/0"), script_type=messages.InputScriptType.SPENDTAPROOT, ) assert ( @@ -49,12 +50,12 @@ def test_p2tr_ownership_id(client): ) -def test_attack_ownership_id(client): +def test_attack_ownership_id(client: Client): # Multisig with global suffix specification. # Use account numbers 1, 2 and 3 to create a valid multisig, # but not containing the keys from account 0 used below. nodes = [ - btc.get_public_node(client, parse_path(f"84'/0'/{i}'")).node + btc.get_public_node(client, parse_path(f"m/84h/0h/{i}h")).node for i in range(1, 4) ] multisig1 = messages.MultisigRedeemScriptType( @@ -63,7 +64,7 @@ def test_attack_ownership_id(client): # Multisig with per-node suffix specification. node = btc.get_public_node( - client, parse_path("84h/0h/0h/0"), coin_name="Bitcoin" + client, parse_path("m/84h/0h/0h/0"), coin_name="Bitcoin" ).node multisig2 = messages.MultisigRedeemScriptType( pubkeys=[ @@ -80,17 +81,17 @@ def test_attack_ownership_id(client): btc.get_ownership_id( client, "Bitcoin", - parse_path("84'/0'/0'/0/0"), + parse_path("m/84h/0h/0h/0/0"), multisig=multisig, script_type=messages.InputScriptType.SPENDWITNESS, ) -def test_p2wpkh_ownership_proof(client): +def test_p2wpkh_ownership_proof(client: Client): ownership_proof, _ = btc.get_ownership_proof( client, "Bitcoin", - parse_path("m/84'/0'/0'/1/0"), + parse_path("m/84h/0h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, ) assert ( @@ -99,11 +100,11 @@ def test_p2wpkh_ownership_proof(client): ) -def test_p2tr_ownership_proof(client): +def test_p2tr_ownership_proof(client: Client): ownership_proof, _ = btc.get_ownership_proof( client, "Bitcoin", - parse_path("m/86'/0'/0'/1/0"), + parse_path("m/86h/0h/0h/1/0"), script_type=messages.InputScriptType.SPENDTAPROOT, ) assert ( @@ -112,12 +113,12 @@ def test_p2tr_ownership_proof(client): ) -def test_fake_ownership_id(client): +def test_fake_ownership_id(client: Client): with pytest.raises(TrezorFailure, match="Invalid ownership identifier"): btc.get_ownership_proof( client, "Bitcoin", - parse_path("m/84'/0'/0'/1/0"), + parse_path("m/84h/0h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, ownership_ids=[ b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" @@ -125,11 +126,11 @@ def test_fake_ownership_id(client): ) -def test_confirm_ownership_proof(client): +def test_confirm_ownership_proof(client: Client): ownership_proof, _ = btc.get_ownership_proof( client, "Bitcoin", - parse_path("m/84'/0'/0'/1/0"), + parse_path("m/84h/0h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, ) @@ -140,11 +141,11 @@ def test_confirm_ownership_proof(client): ) -def test_confirm_ownership_proof_with_data(client): +def test_confirm_ownership_proof_with_data(client: Client): ownership_proof, _ = btc.get_ownership_proof( client, "Bitcoin", - parse_path("m/84'/0'/0'/1/0"), + parse_path("m/84h/0h/0h/1/0"), script_type=messages.InputScriptType.SPENDWITNESS, user_confirmation=True, commitment_data=b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", diff --git a/tests/device_tests/bitcoin/test_getpublickey.py b/tests/device_tests/bitcoin/test_getpublickey.py index 83951fd66..02d7e5bb8 100644 --- a/tests/device_tests/bitcoin/test_getpublickey.py +++ b/tests/device_tests/bitcoin/test_getpublickey.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -108,7 +109,7 @@ VECTORS_INVALID = ( # coin_name, path @pytest.mark.parametrize("coin_name, xpub_magic, path, xpub", VECTORS_BITCOIN) -def test_get_public_node(client, coin_name, xpub_magic, path, xpub): +def test_get_public_node(client: Client, coin_name, xpub_magic, path, xpub): res = btc.get_public_node(client, path, coin_name=coin_name) assert res.xpub == xpub assert bip32.serialize(res.node, xpub_magic) == xpub @@ -116,7 +117,7 @@ def test_get_public_node(client, coin_name, xpub_magic, path, xpub): @pytest.mark.xfail(reason="Currently path validation on get_public_node is disabled.") @pytest.mark.parametrize("coin_name, path", VECTORS_INVALID) -def test_invalid_path(client, coin_name, path): +def test_invalid_path(client: Client, coin_name, path): with pytest.raises(TrezorFailure, match="Forbidden key path"): btc.get_public_node(client, path, coin_name=coin_name) @@ -146,7 +147,7 @@ VECTORS_SCRIPT_TYPES = ( # script_type, xpub, xpub_ignored_magic @pytest.mark.parametrize("script_type, xpub, xpub_ignored_magic", VECTORS_SCRIPT_TYPES) -def test_script_type(client, script_type, xpub, xpub_ignored_magic): +def test_script_type(client: Client, script_type, xpub, xpub_ignored_magic): path = parse_path("m/44h/0h/0") res = btc.get_public_node( client, path, coin_name="Bitcoin", script_type=script_type diff --git a/tests/device_tests/bitcoin/test_getpublickey_curve.py b/tests/device_tests/bitcoin/test_getpublickey_curve.py index 5c34aa9cc..8b8cba688 100644 --- a/tests/device_tests/bitcoin/test_getpublickey_curve.py +++ b/tests/device_tests/bitcoin/test_getpublickey_curve.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -53,18 +54,18 @@ VECTORS = ( # curve, path, pubkey @pytest.mark.parametrize("curve, path, pubkey", VECTORS) -def test_publickey_curve(client, curve, path, pubkey): +def test_publickey_curve(client: Client, curve, path, pubkey): resp = btc.get_public_node(client, path, ecdsa_curve_name=curve) assert resp.node.public_key.hex() == pubkey -def test_ed25519_public(client): +def test_ed25519_public(client: Client): with pytest.raises(TrezorFailure): btc.get_public_node(client, PATH_PUBLIC, ecdsa_curve_name="ed25519") @pytest.mark.xfail(reason="Currently path validation on get_public_node is disabled.") -def test_coin_and_curve(client): +def test_coin_and_curve(client: Client): with pytest.raises( TrezorFailure, match="Cannot use coin_name or script_type with ecdsa_curve_name" ): diff --git a/tests/device_tests/bitcoin/test_grs.py b/tests/device_tests/bitcoin/test_grs.py index 55536934e..fd6dd80cf 100644 --- a/tests/device_tests/bitcoin/test_grs.py +++ b/tests/device_tests/bitcoin/test_grs.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...tx_cache import TxCache @@ -41,17 +42,17 @@ TXHASH_45aeb9 = bytes.fromhex( pytestmark = pytest.mark.altcoin -def test_legacy(client): +def test_legacy(client: Client): inp1 = messages.TxInputType( # FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA - address_n=parse_path("44'/17'/0'/0/2"), - amount=210016, + address_n=parse_path("m/44h/17h/0h/0/2"), + amount=210_016, prev_hash=TXHASH_cb74c8, prev_index=0, ) out1 = messages.TxOutputType( address="FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9", - amount=210016 - 192, + amount=210_016 - 192, script_type=messages.OutputScriptType.PAYTOADDRESS, ) _, serialized_tx = btc.sign_tx( @@ -63,17 +64,17 @@ def test_legacy(client): ) -def test_legacy_change(client): +def test_legacy_change(client: Client): inp1 = messages.TxInputType( # FXHDsC5ZqWQHkDmShzgRVZ1MatpWhwxTAA - address_n=parse_path("44'/17'/0'/0/2"), - amount=210016, + address_n=parse_path("m/44h/17h/0h/0/2"), + amount=210_016, prev_hash=TXHASH_cb74c8, prev_index=0, ) out1 = messages.TxOutputType( - address_n=parse_path("44'/17'/0'/0/3"), # FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9 - amount=210016 - 192, + address_n=parse_path("m/44h/17h/0h/0/3"), # FtM4zAn9aVYgHgxmamWBgWPyZsb6RhvkA9 + amount=210_016 - 192, script_type=messages.OutputScriptType.PAYTOADDRESS, ) _, serialized_tx = btc.sign_tx( @@ -85,11 +86,11 @@ def test_legacy_change(client): ) -def test_send_segwit_p2sh(client): +def test_send_segwit_p2sh(client: Client): inp1 = messages.TxInputType( # 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7 - address_n=parse_path("49'/1'/0'/1/0"), - amount=123456789, + address_n=parse_path("m/49h/1h/0h/1/0"), + amount=123_456_789, prev_hash=TXHASH_09a48b, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -97,12 +98,12 @@ def test_send_segwit_p2sh(client): ) out1 = messages.TxOutputType( address="mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7", - amount=123456789 - 11000 - 12300000, + amount=123_456_789 - 11_000 - 12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) _, serialized_tx = btc.sign_tx( @@ -110,7 +111,7 @@ def test_send_segwit_p2sh(client): "Groestlcoin Testnet", [inp1], [out1, out2], - lock_time=650756, + lock_time=650_756, prev_txes=TX_API_TESTNET, ) assert ( @@ -119,11 +120,11 @@ def test_send_segwit_p2sh(client): ) -def test_send_segwit_p2sh_change(client): +def test_send_segwit_p2sh_change(client: Client): inp1 = messages.TxInputType( # 2N1LGaGg836mqSQqiuUBLfcyGBhyZYBtBZ7 - address_n=parse_path("49'/1'/0'/1/0"), - amount=123456789, + address_n=parse_path("m/49h/1h/0h/1/0"), + amount=123_456_789, prev_hash=TXHASH_09a48b, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, @@ -131,20 +132,20 @@ def test_send_segwit_p2sh_change(client): ) out1 = messages.TxOutputType( address="mvbu1Gdy8SUjTenqerxUaZyYjmvedc787y", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, - amount=123456789 - 11000 - 12300000, + amount=123_456_789 - 11_000 - 12_300_000, ) _, serialized_tx = btc.sign_tx( client, "Groestlcoin Testnet", [inp1], [out1, out2], - lock_time=650756, + lock_time=650_756, prev_txes=TX_API_TESTNET, ) assert ( @@ -153,10 +154,10 @@ def test_send_segwit_p2sh_change(client): ) -def test_send_segwit_native(client): +def test_send_segwit_native(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_4f2f85, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -164,20 +165,20 @@ def test_send_segwit_native(client): ) out1 = messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e", - amount=5000000, + amount=5_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="tgrs1qejqxwzfld7zr6mf7ygqy5s5se5xq7vmt9lkd57", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=12300000 - 11000 - 5000000, + amount=12_300_000 - 11_000 - 5_000_000, ) _, serialized_tx = btc.sign_tx( client, "Groestlcoin Testnet", [inp1], [out1, out2], - lock_time=650713, + lock_time=650_713, prev_txes=TX_API_TESTNET, ) assert ( @@ -186,10 +187,10 @@ def test_send_segwit_native(client): ) -def test_send_segwit_native_change(client): +def test_send_segwit_native_change(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_4f2f85, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -197,20 +198,20 @@ def test_send_segwit_native_change(client): ) out1 = messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKDv3V3e", - amount=5000000, + amount=5_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("84'/1'/0'/1/0"), + address_n=parse_path("m/84h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOWITNESS, - amount=12300000 - 11000 - 5000000, + amount=12_300_000 - 11_000 - 5_000_000, ) _, serialized_tx = btc.sign_tx( client, "Groestlcoin Testnet", [inp1], [out1, out2], - lock_time=650713, + lock_time=650_713, prev_txes=TX_API_TESTNET, ) assert ( @@ -219,11 +220,11 @@ def test_send_segwit_native_change(client): ) -def test_send_p2tr(client): +def test_send_p2tr(client: Client): inp1 = messages.TxInputType( # tgrs1paxhjl357yzctuf3fe58fcdx6nul026hhh6kyldpfsf3tckj9a3wsvuqrgn - address_n=parse_path("86'/1'/1'/0/0"), - amount=4450, + address_n=parse_path("m/86h/1h/1h/0/0"), + amount=4_450, prev_hash=TXHASH_45aeb9, prev_index=0, script_type=messages.InputScriptType.SPENDTAPROOT, @@ -231,7 +232,7 @@ def test_send_p2tr(client): out1 = messages.TxOutputType( # 86'/1'/0'/0/0 address="tgrs1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq5v2q7z", - amount=4300, + amount=4_300, script_type=messages.OutputScriptType.PAYTOADDRESS, ) _, serialized_tx = btc.sign_tx( diff --git a/tests/device_tests/bitcoin/test_komodo.py b/tests/device_tests/bitcoin/test_komodo.py index 7d41d21b3..51de6e59c 100644 --- a/tests/device_tests/bitcoin/test_komodo.py +++ b/tests/device_tests/bitcoin/test_komodo.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...tx_cache import TxCache @@ -41,21 +42,21 @@ TXHASH_7b28bd = bytes.fromhex( pytestmark = [pytest.mark.altcoin, pytest.mark.komodo] -def test_one_one_fee_sapling(client): +def test_one_one_fee_sapling(client: Client): # prevout: 2807c5b126ec8e2b078cab0f12e4c8b4ce1d7724905f8ebef8dca26b0c8e0f1d:0 # input 1: 10.9998 KMD inp1 = messages.TxInputType( # R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi - address_n=parse_path("44'/141'/0'/0/0"), - amount=1099980000, + address_n=parse_path("m/44h/141h/0h/0/0"), + amount=1_099_980_000, prev_hash=TXHASH_2807c, prev_index=0, ) out1 = messages.TxOutputType( address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi", - amount=1099980000 - 10000, + amount=1_099_980_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -97,28 +98,28 @@ def test_one_one_fee_sapling(client): ) -def test_one_one_rewards_claim(client): +def test_one_one_rewards_claim(client: Client): # prevout: 7b28bd91119e9776f0d4ebd80e570165818a829bbf4477cd1afe5149dbcd34b1:0 # input 1: 10.9997 KMD inp1 = messages.TxInputType( # R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi - address_n=parse_path("44'/141'/0'/0/0"), - amount=1099970000, + address_n=parse_path("m/44h/141h/0h/0/0"), + amount=1_099_970_000, prev_hash=TXHASH_7b28bd, prev_index=0, ) out1 = messages.TxOutputType( address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi", - amount=1099970000 - 10000, + amount=1_099_970_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) # kmd interest, vout sum > vin sum out2 = messages.TxOutputType( address="R9HgJZo6JBKmPvhm7whLSR8wiHyZrEDVRi", - amount=79605, + amount=79_605, script_type=messages.OutputScriptType.PAYTOADDRESS, ) diff --git a/tests/device_tests/bitcoin/test_multisig.py b/tests/device_tests/bitcoin/test_multisig.py index c77865778..a116aa903 100644 --- a/tests/device_tests/bitcoin/test_multisig.py +++ b/tests/device_tests/bitcoin/test_multisig.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path, tx_hash @@ -40,9 +41,9 @@ TXHASH_fbbff7 = bytes.fromhex( pytestmark = pytest.mark.multisig -def test_2_of_3(client): +def test_2_of_3(client: Client): nodes = [ - btc.get_public_node(client, parse_path(f"48'/0'/{index}'/0'")).node + btc.get_public_node(client, parse_path(f"m/48h/0h/{index}h/0h")).node for index in range(1, 4) ] @@ -51,8 +52,8 @@ def test_2_of_3(client): ) # Let's go to sign with key 1 inp1 = messages.TxInputType( - address_n=parse_path("48'/0'/1'/0'/0/0"), - amount=100000, + address_n=parse_path("m/48h/0h/1h/0h/0/0"), + amount=100_000, prev_hash=TXHASH_c6091a, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -61,7 +62,7 @@ def test_2_of_3(client): out1 = messages.TxOutputType( address="12iyMbUb4R2K3gre4dHSrbu5azG5KaqVss", - amount=100000, + amount=100_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -110,8 +111,8 @@ def test_2_of_3(client): # Let's do a second signature with key 3 inp3 = messages.TxInputType( - address_n=parse_path("48'/0'/3'/0'/0/0"), - amount=100000, + address_n=parse_path("m/48h/0h/3h/0h/0/0"), + amount=100_000, prev_hash=TXHASH_c6091a, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -152,9 +153,9 @@ def test_2_of_3(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_15_of_15(client): +def test_15_of_15(client: Client): node = btc.get_public_node( - client, parse_path("48h/0h/1h/0h"), coin_name="Bitcoin" + client, parse_path("m/48h/0h/1h/0h"), coin_name="Bitcoin" ).node pubs = [messages.HDNodePathType(node=node, address_n=[0, x]) for x in range(15)] @@ -162,7 +163,7 @@ def test_15_of_15(client): out1 = messages.TxOutputType( address="17kTB7qSk3MupQxWdiv5ZU3zcrZc2Azes1", - amount=10000, + amount=10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -172,8 +173,8 @@ def test_15_of_15(client): ) inp1 = messages.TxInputType( - address_n=parse_path(f"48h/0h/1h/0h/0/{x}"), - amount=20000, + address_n=parse_path(f"m/48h/0h/1h/0h/0/{x}"), + amount=20_000, prev_hash=TXHASH_6189e3, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -193,9 +194,9 @@ def test_15_of_15(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_missing_pubkey(client): +def test_missing_pubkey(client: Client): node = btc.get_public_node( - client, parse_path("48h/0h/1h/0h/0"), coin_name="Bitcoin" + client, parse_path("m/48h/0h/1h/0h/0"), coin_name="Bitcoin" ).node multisig = messages.MultisigRedeemScriptType( @@ -210,8 +211,8 @@ def test_missing_pubkey(client): # Let's go to sign with key 10, which is NOT in pubkeys inp1 = messages.TxInputType( - address_n=parse_path("48h/0h/1h/0h/0/10"), - amount=100000, + address_n=parse_path("m/48h/0h/1h/0h/0/10"), + amount=100_000, prev_hash=TXHASH_c6091a, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -220,7 +221,7 @@ def test_missing_pubkey(client): out1 = messages.TxOutputType( address="12iyMbUb4R2K3gre4dHSrbu5azG5KaqVss", - amount=100000, + amount=100_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -233,14 +234,14 @@ def test_missing_pubkey(client): assert exc.value.message.endswith("Pubkey not found in multisig script") -def test_attack_change_input(client): +def test_attack_change_input(client: Client): """ In Phases 1 and 2 the attacker replaces a non-multisig input `input_real` with a multisig input `input_fake`, which allows the attacker to provide a 1-of-2 multisig change address. When `input_real` is provided in the signing phase, an error must occur. """ - address_n = parse_path("48'/1'/0'/1'/0/0") + address_n = parse_path("m/48h/1h/0h/1h/0/0") attacker_multisig_public_key = bytes.fromhex( "03653a148b68584acb97947344a7d4fd6a6f8b8485cad12987ff8edac874268088" ) @@ -250,7 +251,7 @@ def test_attack_change_input(client): prev_hash=TXHASH_fbbff7, prev_index=1, script_type=messages.InputScriptType.SPENDP2SHWITNESS, - amount=1000000, + amount=1_000_000, ) multisig_fake = messages.MultisigRedeemScriptType( @@ -279,13 +280,13 @@ def test_attack_change_input(client): output_payee = messages.TxOutputType( address="n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi", - amount=1000, + amount=1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) output_change = messages.TxOutputType( address_n=address_n, - amount=input_real.amount - output_payee.amount - 1000, + amount=input_real.amount - output_payee.amount - 1_000, script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, multisig=multisig_fake, ) diff --git a/tests/device_tests/bitcoin/test_multisig_change.py b/tests/device_tests/bitcoin/test_multisig_change.py index 143da7f07..db6d22add 100644 --- a/tests/device_tests/bitcoin/test_multisig_change.py +++ b/tests/device_tests/bitcoin/test_multisig_change.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import H_, parse_path from ... import bip32 @@ -109,7 +110,7 @@ multisig_in3 = messages.MultisigRedeemScriptType( # 2N9W4z9AhAPaHghtqVQPbaTAGHdbrhKeBQw INP1 = messages.TxInputType( address_n=[H_(45), 0, 0, 0], - amount=50000000, + amount=50_000_000, prev_hash=TXHASH_16c6c8, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -119,7 +120,7 @@ INP1 = messages.TxInputType( # 2NDBG6QXQLtnQ3jRGkrqo53BiCeXfQXLdj4 INP2 = messages.TxInputType( address_n=[H_(45), 0, 0, 1], - amount=34500000, + amount=34_500_000, prev_hash=TXHASH_d80c34, prev_index=0, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -129,7 +130,7 @@ INP2 = messages.TxInputType( # 2MvwPWfp2XPU3S1cMwgEMKBPUw38VP5SBE4 INP3 = messages.TxInputType( address_n=[H_(45), 0, 0, 1], - amount=55500000, + amount=55_500_000, prev_hash=TXHASH_b0946d, prev_index=0, script_type=messages.InputScriptType.SPENDMULTISIG, @@ -176,16 +177,16 @@ def _responses(INP1, INP2, change=0): # both outputs are external -def test_external_external(client): +def test_external_external(client: Client): out1 = messages.TxOutputType( address="1F8yBZB2NZhPZvJekhjTwjhQRRvQeTjjXr", - amount=40000000, + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="1H7uXJQTVwXca2BXF2opTrvuZapk8Cm8zY", - amount=44000000, + amount=44_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -206,16 +207,16 @@ def test_external_external(client): # first external, second internal -def test_external_internal(client): +def test_external_internal(client: Client): out1 = messages.TxOutputType( address="1F8yBZB2NZhPZvJekhjTwjhQRRvQeTjjXr", - amount=40000000, + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("45'/0/1/1"), - amount=44000000, + address_n=parse_path("m/45h/0/1/1"), + amount=44_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -236,16 +237,16 @@ def test_external_internal(client): # first internal, second external -def test_internal_external(client): +def test_internal_external(client: Client): out1 = messages.TxOutputType( - address_n=parse_path("45'/0/1/0"), - amount=40000000, + address_n=parse_path("m/45h/0/1/0"), + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="1H7uXJQTVwXca2BXF2opTrvuZapk8Cm8zY", - amount=44000000, + amount=44_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -266,16 +267,16 @@ def test_internal_external(client): # both outputs are external -def test_multisig_external_external(client): +def test_multisig_external_external(client: Client): out1 = messages.TxOutputType( address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt", - amount=40000000, + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg", - amount=44000000, + amount=44_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -296,7 +297,7 @@ def test_multisig_external_external(client): # inputs match, change matches (first is change) -def test_multisig_change_match_first(client): +def test_multisig_change_match_first(client: Client): multisig_out1 = messages.MultisigRedeemScriptType( nodes=[NODE_EXT2, NODE_EXT1, NODE_INT], address_n=[1, 0], @@ -307,13 +308,13 @@ def test_multisig_change_match_first(client): out1 = messages.TxOutputType( address_n=[H_(45), 0, 1, 0], multisig=multisig_out1, - amount=40000000, + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOMULTISIG, ) out2 = messages.TxOutputType( address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg", - amount=44000000, + amount=44_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -334,7 +335,7 @@ def test_multisig_change_match_first(client): # inputs match, change matches (second is change) -def test_multisig_change_match_second(client): +def test_multisig_change_match_second(client: Client): multisig_out2 = messages.MultisigRedeemScriptType( nodes=[NODE_EXT1, NODE_EXT2, NODE_INT], address_n=[1, 1], @@ -344,14 +345,14 @@ def test_multisig_change_match_second(client): out1 = messages.TxOutputType( address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt", - amount=40000000, + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address_n=[H_(45), 0, 1, 1], multisig=multisig_out2, - amount=44000000, + amount=44_000_000, script_type=messages.OutputScriptType.PAYTOMULTISIG, ) @@ -372,7 +373,7 @@ def test_multisig_change_match_second(client): # inputs match, change mismatches (second tries to be change but isn't) -def test_multisig_mismatch_change(client): +def test_multisig_mismatch_change(client: Client): multisig_out2 = messages.MultisigRedeemScriptType( nodes=[NODE_EXT1, NODE_INT, NODE_EXT3], address_n=[1, 0], @@ -382,14 +383,14 @@ def test_multisig_mismatch_change(client): out1 = messages.TxOutputType( address="3B23k4kFBRtu49zvpG3Z9xuFzfpHvxBcwt", - amount=40000000, + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address_n=[H_(45), 0, 1, 0], multisig=multisig_out2, - amount=44000000, + amount=44_000_000, script_type=messages.OutputScriptType.PAYTOMULTISIG, ) @@ -410,7 +411,7 @@ def test_multisig_mismatch_change(client): # inputs mismatch, change matches with first input -def test_multisig_mismatch_inputs(client): +def test_multisig_mismatch_inputs(client: Client): multisig_out1 = messages.MultisigRedeemScriptType( nodes=[NODE_EXT2, NODE_EXT1, NODE_INT], address_n=[1, 0], @@ -421,13 +422,13 @@ def test_multisig_mismatch_inputs(client): out1 = messages.TxOutputType( address_n=[H_(45), 0, 1, 0], multisig=multisig_out1, - amount=40000000, + amount=40_000_000, script_type=messages.OutputScriptType.PAYTOMULTISIG, ) out2 = messages.TxOutputType( address="3PkXLsY7AUZCrCKGvX8FfP2EawowUBMbcg", - amount=65000000, + amount=65_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) diff --git a/tests/device_tests/bitcoin/test_nonstandard_paths.py b/tests/device_tests/bitcoin/test_nonstandard_paths.py index ea0ec9a3d..c72c0d6a9 100644 --- a/tests/device_tests/bitcoin/test_nonstandard_paths.py +++ b/tests/device_tests/bitcoin/test_nonstandard_paths.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...tx_cache import TxCache @@ -43,7 +44,7 @@ VECTORS = ( ), # GreenAddress B m/3'/[1-100]'/[1,4]/address_index ( - "m/3'/100'/4/255", + "m/3h/100h/4/255", ( messages.InputScriptType.SPENDADDRESS, messages.InputScriptType.SPENDWITNESS, @@ -80,27 +81,27 @@ VECTORS_MULTISIG = ( # GreenAddress A m/[1,4]/address_index (("m/1", "m/1", "m/4"), [255]), # GreenAddress B m/3'/[1-100]'/[1,4]/address_index - (("m/3'/100'/1", "m/3'/99'/1", "m/3'/98'/1"), [255]), + (("m/3h/100h/1", "m/3h/99h/1", "m/3h/98h/1"), [255]), # GreenAdress Sign A m/1195487518 (("m/1195487518", "m/1195487518", "m/1195487518"), []), # GreenAdress Sign B m/1195487518/6/address_index (("m/1195487518/6", "m/1195487518/6", "m/1195487518/6"), [255]), # Unchained hardened m/45'/coin_type'/account'/[0-1000000]/change/address_index ( - ("m/45'/0'/63'/1000000", "m/45'/0'/62'/1000000", "m/45'/0'/61'/1000000"), + ("m/45h/0h/63h/1000000", "m/45h/0h/62h/1000000", "m/45h/0h/61h/1000000"), [0, 255], ), # Unchained unhardened m/45'/coin_type/account/[0-1000000]/change/address_index - (("m/45'/0/63/1000000", "m/45'/0/62/1000000", "m/45'/0/61/1000000"), [0, 255]), + (("m/45h/0/63/1000000", "m/45h/0/62/1000000", "m/45h/0/61/1000000"), [0, 255]), # Unchained deprecated m/45'/coin_type'/account'/[0-1000000]/address_index - (("m/45'/0'/63'/1000000", "m/45'/0'/62'/1000000", "m/45'/0/61/1000000"), [255]), + (("m/45h/0h/63h/1000000", "m/45h/0h/62h/1000000", "m/45h/0/61/1000000"), [255]), ) # Has AlwaysMatchingSchema but let's make sure the nonstandard paths are # accepted in case we make this more restrictive in the future. @pytest.mark.parametrize("path, script_types", VECTORS) -def test_getpublicnode(client, path, script_types): +def test_getpublicnode(client: Client, path, script_types): for script_type in script_types: res = btc.get_public_node( client, parse_path(path), coin_name="Bitcoin", script_type=script_type @@ -110,7 +111,7 @@ def test_getpublicnode(client, path, script_types): @pytest.mark.parametrize("path, script_types", VECTORS) -def test_getaddress(client, path, script_types): +def test_getaddress(client: Client, path, script_types): for script_type in script_types: res = btc.get_address( client, @@ -124,7 +125,7 @@ def test_getaddress(client, path, script_types): @pytest.mark.parametrize("path, script_types", VECTORS) -def test_signmessage(client, path, script_types): +def test_signmessage(client: Client, path, script_types): for script_type in script_types: sig = btc.sign_message( client, @@ -138,14 +139,14 @@ def test_signmessage(client, path, script_types): @pytest.mark.parametrize("path, script_types", VECTORS) -def test_signtx(client, path, script_types): +def test_signtx(client: Client, path, script_types): # tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882 # input 0: 0.0039 BTC for script_type in script_types: inp1 = messages.TxInputType( address_n=parse_path(path), - amount=390000, + amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, script_type=script_type, @@ -153,7 +154,7 @@ def test_signtx(client, path, script_types): out1 = messages.TxOutputType( address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", - amount=390000 - 10000, + amount=390_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -166,7 +167,7 @@ def test_signtx(client, path, script_types): @pytest.mark.multisig @pytest.mark.parametrize("paths, address_index", VECTORS_MULTISIG) -def test_getaddress_multisig(client, paths, address_index): +def test_getaddress_multisig(client: Client, paths, address_index): pubs = [ messages.HDNodePathType( node=btc.get_public_node( @@ -194,7 +195,7 @@ def test_getaddress_multisig(client, paths, address_index): # the test is going to fail if we make firmware stricter about this @pytest.mark.multisig @pytest.mark.parametrize("paths, address_index", VECTORS_MULTISIG) -def test_signtx_multisig(client, paths, address_index): +def test_signtx_multisig(client: Client, paths, address_index): pubs = [ messages.HDNodePathType( node=btc.get_public_node( @@ -211,13 +212,13 @@ def test_signtx_multisig(client, paths, address_index): out1 = messages.TxOutputType( address="17kTB7qSk3MupQxWdiv5ZU3zcrZc2Azes1", - amount=10000, + amount=10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) inp1 = messages.TxInputType( address_n=parse_path(paths[0]) + address_index, - amount=20000, + amount=20_000, prev_hash=TXHASH_6189e3, prev_index=1, script_type=messages.InputScriptType.SPENDMULTISIG, diff --git a/tests/device_tests/bitcoin/test_op_return.py b/tests/device_tests/bitcoin/test_op_return.py index 4a48bcc0c..d82eb7b38 100644 --- a/tests/device_tests/bitcoin/test_op_return.py +++ b/tests/device_tests/bitcoin/test_op_return.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -31,17 +32,17 @@ TXHASH_d5f65e = bytes.fromhex( ) -def test_opreturn(client): +def test_opreturn(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/0'/0'/0/2"), - amount=390000, + address_n=parse_path("m/44h/0h/0h/0/2"), + amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, ) out1 = messages.TxOutputType( address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", - amount=390000 - 10000, + amount=390_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -83,17 +84,17 @@ def test_opreturn(client): ) -def test_nonzero_opreturn(client): +def test_nonzero_opreturn(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/0'/10'/0/5"), - amount=390000, + address_n=parse_path("m/44h/0h/10h/0/5"), + amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, ) out1 = messages.TxOutputType( op_return_data=b"test of the op_return data", - amount=10000, + amount=10_000, script_type=messages.OutputScriptType.PAYTOOPRETURN, ) @@ -108,16 +109,16 @@ def test_nonzero_opreturn(client): btc.sign_tx(client, "Bitcoin", [inp1], [out1], prev_txes=TX_API) -def test_opreturn_address(client): +def test_opreturn_address(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44'/0'/0'/0/2"), - amount=390000, + address_n=parse_path("m/44h/0h/0h/0/2"), + amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, ) out1 = messages.TxOutputType( - address_n=parse_path("44'/0'/0'/1/2"), + address_n=parse_path("m/44h/0h/0h/1/2"), amount=0, op_return_data=b"OMNI TRANSACTION GOES HERE", script_type=messages.OutputScriptType.PAYTOOPRETURN, diff --git a/tests/device_tests/bitcoin/test_peercoin.py b/tests/device_tests/bitcoin/test_peercoin.py index 458115c8e..b1b62e49e 100644 --- a/tests/device_tests/bitcoin/test_peercoin.py +++ b/tests/device_tests/bitcoin/test_peercoin.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -31,20 +32,20 @@ TXHASH_41b29a = bytes.fromhex( @pytest.mark.altcoin @pytest.mark.peercoin -def test_timestamp_included(client): +def test_timestamp_included(client: Client): # tx: 41b29ad615d8eea40a4654a052d18bb10cd08f203c351f4d241f88b031357d3d # input 0: 0.1 PPC inp1 = messages.TxInputType( - address_n=parse_path("m/44'/6'/0'/0/0"), - amount=100000, + address_n=parse_path("m/44h/6h/0h/0/0"), + amount=100_000, prev_hash=TXHASH_41b29a, prev_index=0, ) out1 = messages.TxOutputType( address="PXtfyTjzgXSgTwK5AbszdHQSSxyQN3BLM5", - amount=100000 - 10000, + amount=100_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -65,16 +66,16 @@ def test_timestamp_included(client): @pytest.mark.altcoin @pytest.mark.peercoin -def test_timestamp_missing(client): +def test_timestamp_missing(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("m/44'/6'/0'/0/0"), - amount=100000, + address_n=parse_path("m/44h/6h/0h/0/0"), + amount=100_000, prev_hash=TXHASH_41b29a, prev_index=0, ) out1 = messages.TxOutputType( address="PXtfyTjzgXSgTwK5AbszdHQSSxyQN3BLM5", - amount=100000 - 10000, + amount=100_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -103,16 +104,16 @@ def test_timestamp_missing(client): @pytest.mark.altcoin @pytest.mark.peercoin -def test_timestamp_missing_prevtx(client): +def test_timestamp_missing_prevtx(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("m/44'/6'/0'/0/0"), - amount=100000, + address_n=parse_path("m/44h/6h/0h/0/0"), + amount=100_000, prev_hash=TXHASH_41b29a, prev_index=0, ) out1 = messages.TxOutputType( address="PXtfyTjzgXSgTwK5AbszdHQSSxyQN3BLM5", - amount=100000 - 10000, + amount=100_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) diff --git a/tests/device_tests/bitcoin/test_signmessage.py b/tests/device_tests/bitcoin/test_signmessage.py index 93031b9bd..75ed4dc8c 100644 --- a/tests/device_tests/bitcoin/test_signmessage.py +++ b/tests/device_tests/bitcoin/test_signmessage.py @@ -18,7 +18,7 @@ import pytest from trezorlib import btc, messages -from trezorlib.debuglink import message_filters +from trezorlib.debuglink import TrezorClientDebugLink as Client, message_filters from trezorlib.tools import parse_path S = messages.InputScriptType @@ -41,7 +41,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "p2pkh", "Bitcoin", - "44h/0h/0h/0/0", + "m/44h/0h/0h/0/0", S.SPENDADDRESS, False, "1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL", @@ -51,7 +51,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-p2sh", "Bitcoin", - "49h/0h/0h/0/0", + "m/49h/0h/0h/0/0", S.SPENDP2SHWITNESS, False, "3L6TyTisPBmrDAj6RoKmDzNnj4eQi54gD2", @@ -61,7 +61,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-native", "Bitcoin", - "84h/0h/0h/0/0", + "m/84h/0h/0h/0/0", S.SPENDWITNESS, False, "bc1qannfxke2tfd4l7vhepehpvt05y83v3qsf6nfkk", @@ -71,7 +71,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "p2pkh", "Bitcoin", - "44h/0h/0h/0/0", + "m/44h/0h/0h/0/0", S.SPENDADDRESS, True, "1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL", @@ -81,7 +81,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-p2sh", "Bitcoin", - "49h/0h/0h/0/0", + "m/49h/0h/0h/0/0", S.SPENDP2SHWITNESS, True, "3L6TyTisPBmrDAj6RoKmDzNnj4eQi54gD2", @@ -91,7 +91,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-native", "Bitcoin", - "84h/0h/0h/0/0", + "m/84h/0h/0h/0/0", S.SPENDWITNESS, True, "bc1qannfxke2tfd4l7vhepehpvt05y83v3qsf6nfkk", @@ -102,7 +102,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "p2pkh long message", "Bitcoin", - "44h/0h/0h/0/0", + "m/44h/0h/0h/0/0", S.SPENDADDRESS, False, "1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL", @@ -112,7 +112,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-p2sh long message", "Bitcoin", - "49h/0h/0h/0/0", + "m/49h/0h/0h/0/0", S.SPENDP2SHWITNESS, False, "3L6TyTisPBmrDAj6RoKmDzNnj4eQi54gD2", @@ -122,7 +122,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-native long message", "Bitcoin", - "84h/0h/0h/0/0", + "m/84h/0h/0h/0/0", S.SPENDWITNESS, False, "bc1qannfxke2tfd4l7vhepehpvt05y83v3qsf6nfkk", @@ -133,7 +133,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "NFKD message", "Bitcoin", - "44h/0h/0h/0/1", + "m/44h/0h/0h/0/1", S.SPENDADDRESS, False, "1GWFxtwWmNVqotUPXLcKVL2mUKpshuJYo", @@ -143,7 +143,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "NFC message", "Bitcoin", - "44h/0h/0h/0/1", + "m/44h/0h/0h/0/1", S.SPENDADDRESS, False, "1GWFxtwWmNVqotUPXLcKVL2mUKpshuJYo", @@ -154,7 +154,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "p2pkh", "Testnet", - "44h/1h/0h/0/0", + "m/44h/1h/0h/0/0", S.SPENDADDRESS, False, "mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q", @@ -164,7 +164,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-p2sh", "Testnet", - "49h/1h/0h/0/0", + "m/49h/1h/0h/0/0", S.SPENDP2SHWITNESS, False, "2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", @@ -174,7 +174,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "segwit-native", "Testnet", - "84h/1h/0h/0/0", + "m/84h/1h/0h/0/0", S.SPENDWITNESS, False, "tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9", @@ -185,7 +185,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "bcash", "Bcash", - "44h/145h/0h/0/0", + "m/44h/145h/0h/0/0", S.SPENDADDRESS, False, "bitcoincash:qr08q88p9etk89wgv05nwlrkm4l0urz4cyl36hh9sv", @@ -196,7 +196,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "grs-p2pkh", "Groestlcoin", - "44h/17h/0h/0/0", + "m/44h/17h/0h/0/0", S.SPENDADDRESS, False, "Fj62rBJi8LvbmWu2jzkaUX1NFXLEqDLoZM", @@ -207,7 +207,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "grs-segwit-p2sh", "Groestlcoin", - "49h/17h/0h/0/0", + "m/49h/17h/0h/0/0", S.SPENDP2SHWITNESS, False, "31inaRqambLsd9D7Ke4USZmGEVd3PHkh7P", @@ -218,7 +218,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "grs-segwit-native", "Groestlcoin", - "84h/17h/0h/0/0", + "m/84h/17h/0h/0/0", S.SPENDWITNESS, False, "grs1qw4teyraux2s77nhjdwh9ar8rl9dt7zww8r6lne", @@ -229,7 +229,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "decred", "Decred", - "44h/42h/0h/0/0", + "m/44h/42h/0h/0/0", S.SPENDADDRESS, False, "DsZtHtXHwvNR3nWf1PqfxrEdnRJisKEyzp1", @@ -240,7 +240,7 @@ VECTORS = ( # case name, coin_name, path, script_type, address, message, signat case( "decred-empty", "Decred", - "44h/42h/0h/0/0", + "m/44h/42h/0h/0/0", S.SPENDADDRESS, False, "DsZtHtXHwvNR3nWf1PqfxrEdnRJisKEyzp1", @@ -282,7 +282,7 @@ MESSAGE_LENGTHS = ( @pytest.mark.skip_t1 @pytest.mark.parametrize("message", MESSAGE_LENGTHS) -def test_signmessage_pagination(client, message): +def test_signmessage_pagination(client: Client, message): message_read = "" def input_flow(): @@ -330,7 +330,7 @@ def test_signmessage_pagination(client, message): @pytest.mark.skip_t1 -def test_signmessage_pagination_trailing_newline(client): +def test_signmessage_pagination_trailing_newline(client: Client): message = "THIS\nMUST NOT\nBE\nPAGINATED\n" # The trailing newline must not cause a new paginated screen to appear. # The UI must be a single dialog without pagination. @@ -352,7 +352,7 @@ def test_signmessage_pagination_trailing_newline(client): ) -def test_signmessage_path_warning(client): +def test_signmessage_path_warning(client: Client): message = "This is an example of a signed message." with client: diff --git a/tests/device_tests/bitcoin/test_signtx.py b/tests/device_tests/bitcoin/test_signtx.py index afe587c91..b3e70d5ab 100644 --- a/tests/device_tests/bitcoin/test_signtx.py +++ b/tests/device_tests/bitcoin/test_signtx.py @@ -19,6 +19,7 @@ from datetime import datetime, timezone import pytest from trezorlib import btc, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path, tx_hash @@ -81,11 +82,11 @@ TXHASH_1f326f = bytes.fromhex( ) -def test_one_one_fee(client): +def test_one_one_fee(client: Client): # input tx: 0dac366fd8a67b2a89fbb0d31086e7acded7a5bbf9ef9daa935bc873229ef5b5 inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p + address_n=parse_path("m/44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p amount=63_988, prev_hash=TXHASH_0dac36, prev_index=0, @@ -127,11 +128,11 @@ def test_one_one_fee(client): ) -def test_testnet_one_two_fee(client): +def test_testnet_one_two_fee(client: Client): # input tx: e5040e1bc1ae7667ffb9e5248e90b2fb93cd9150234151ce90e14ab2f5933bcd inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q + address_n=parse_path("m/44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, @@ -144,7 +145,7 @@ def test_testnet_one_two_fee(client): ) out2 = messages.TxOutputType( - address_n=parse_path("44h/1h/0h/1/0"), # mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ + address_n=parse_path("m/44h/1h/0h/1/0"), # mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ amount=900_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -181,19 +182,19 @@ def test_testnet_one_two_fee(client): ) -def test_testnet_fee_high_warning(client): +def test_testnet_fee_high_warning(client: Client): # input tx: 25fee583181847cbe9d9fd9a483a8b8626c99854a72d01de848ef40508d0f3bc # (The "25fee" tx hash is very suitable for testing high fees) inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/7"), # mgV9Z3YuSbxGb2b2Y1T6VCqtU2osui7vhG + address_n=parse_path("m/44h/1h/0h/0/7"), # mgV9Z3YuSbxGb2b2Y1T6VCqtU2osui7vhG amount=129_999_808, prev_hash=TXHASH_25fee5, prev_index=0, ) out1 = messages.TxOutputType( - address="mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs", # "44h/1h/0h/0/6" + address="mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs", # "m/44h/1h/0h/0/6" amount=129_999_808 - 2_500_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -227,18 +228,18 @@ def test_testnet_fee_high_warning(client): ) -def test_one_two_fee(client): +def test_one_two_fee(client: Client): # input tx: 50f6f1209ca92d7359564be803cb2c932cde7d370f7cee50fd1fad6790f6206d inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/5"), # 1GA9u9TfCG7SWmKCveBumdA1TZpfom6ZdJ + address_n=parse_path("m/44h/0h/0h/0/5"), # 1GA9u9TfCG7SWmKCveBumdA1TZpfom6ZdJ amount=50_000, prev_hash=TXHASH_50f6f1, prev_index=1, ) out1 = messages.TxOutputType( - address_n=parse_path("44h/0h/0h/1/3"), # 1EcL6AyfQTyWKGvXwNSfsWoYnD3whzVFdu + address_n=parse_path("m/44h/0h/0h/1/3"), # 1EcL6AyfQTyWKGvXwNSfsWoYnD3whzVFdu amount=30_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -281,30 +282,30 @@ def test_one_two_fee(client): ) -def test_one_three_fee(client): +def test_one_three_fee(client: Client): # input tx: bb5169091f09e833e155b291b662019df56870effe388c626221c5ea84274bc4 inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/1h/0/21"), # mvukVu96xM1QJ971w4Z5cdX4tsJwDyQy2L + address_n=parse_path("m/44h/1h/1h/0/21"), # mvukVu96xM1QJ971w4Z5cdX4tsJwDyQy2L amount=1_183_825, prev_hash=TXHASH_bb5169, prev_index=0, ) out1 = messages.TxOutputType( - address="mgCyjvJaTgVwKoxEaFaDLeFQpZc7qdKXpZ", # 44h/1h/1h/0/20 + address="mgCyjvJaTgVwKoxEaFaDLeFQpZc7qdKXpZ", # m/44h/1h/1h/0/20 amount=100_100, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address="n4qJziM7S8ydGbXKKRJADHuSeAjbx5c1Dp", # 44h/1h/1h/0/22 + address="n4qJziM7S8ydGbXKKRJADHuSeAjbx5c1Dp", # m/44h/1h/1h/0/22 amount=100_100, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out3 = messages.TxOutputType( - address_n=parse_path("44h/1h/1h/1/21"), # n1CFre3Ai975UiWJrjZnFxTVrPkxCVkm8U + address_n=parse_path("m/44h/1h/1h/1/21"), # n1CFre3Ai975UiWJrjZnFxTVrPkxCVkm8U amount=1_183_825 - 100_100 - 100_100 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -348,31 +349,31 @@ def test_one_three_fee(client): ) -def test_two_two(client): +def test_two_two(client: Client): # input tx: ac4ca0e7827a1228f44449cb57b4b9a809a667ca044dc43bb124627fed4bc10a inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/55"), # 14nw9rFTWGUncHZjSqpPSJQaptWW7iRRB8 + address_n=parse_path("m/44h/0h/0h/0/55"), # 14nw9rFTWGUncHZjSqpPSJQaptWW7iRRB8 amount=10_000, prev_hash=TXHASH_ac4ca0, prev_index=1, ) inp2 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/1/7"), # 16hgR6bjr99X6NhrsWuDR6NLpCLEacUNk + address_n=parse_path("m/44h/0h/0h/1/7"), # 16hgR6bjr99X6NhrsWuDR6NLpCLEacUNk amount=83_130, prev_hash=TXHASH_ac4ca0, prev_index=0, ) out1 = messages.TxOutputType( - address_n=parse_path("44h/0h/0h/1/8"), # 1CJzc38F82zBUnMKWxeUqMepkPRmo2BGHt + address_n=parse_path("m/44h/0h/0h/1/8"), # 1CJzc38F82zBUnMKWxeUqMepkPRmo2BGHt amount=71_790, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address="1ByqmhXkC6U5GuUNnAhJsuEVjHt5GhEuJL", # 44h/0h/1h/0/17 + address="1ByqmhXkC6U5GuUNnAhJsuEVjHt5GhEuJL", # m/44h/0h/1h/0/17 amount=10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -425,7 +426,7 @@ def test_two_two(client): @pytest.mark.slow -def test_lots_of_inputs(client): +def test_lots_of_inputs(client: Client): # Tests if device implements serialization of len(inputs) correctly # input tx: 3019487f064329247daad245aed7a75349d09c14b1d24f170947690e030f5b20 @@ -434,14 +435,14 @@ def test_lots_of_inputs(client): for i in range(100): inputs.append( messages.TxInputType( - address_n=parse_path(f"44h/1h/1h/0/{i}"), + address_n=parse_path(f"m/44h/1h/1h/0/{i}"), amount=14_598, prev_hash=TXHASH_301948, prev_index=i, ) ) out = messages.TxOutputType( - address="mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs", # "44h/1h/0h/0/6" + address="mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs", # "m/44h/1h/0h/0/6" amount=100 * 14_598 - 60_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -456,13 +457,13 @@ def test_lots_of_inputs(client): @pytest.mark.slow -def test_lots_of_outputs(client): +def test_lots_of_outputs(client: Client): # Tests if device implements serialization of len(outputs) correctly # input tx: 58d56a5d1325cf83543ee4c87fd73a784e4ba1499ced574be359fa2bdcb9ac8e inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q + address_n=parse_path("m/44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q amount=1_827_955, prev_hash=TXHASH_58d56a, prev_index=1, @@ -472,7 +473,7 @@ def test_lots_of_outputs(client): cnt = 255 for _ in range(cnt): out = messages.TxOutputType( - address="momtnzR3XqXgDSsFmd8gkGxUiHZLde3RmA", # "44h/1h/0h/0/3" + address="momtnzR3XqXgDSsFmd8gkGxUiHZLde3RmA", # "m/44h/1h/0h/0/3" amount=(1_827_955 - 10_000) // cnt, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -489,13 +490,13 @@ def test_lots_of_outputs(client): @pytest.mark.slow -def test_lots_of_change(client): +def test_lots_of_change(client: Client): # Tests if device implements prompting for multiple change addresses correctly # input tx: 892d06cb3394b8e6006eec9a2aa90692b718a29be6844b6c6a9e89ec3aa6aac4 inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/6"), # mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs + address_n=parse_path("m/44h/1h/0h/0/6"), # mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs amount=1_553_800, prev_hash=TXHASH_892d06, prev_index=0, @@ -503,7 +504,7 @@ def test_lots_of_change(client): outputs = [ messages.TxOutputType( - address="mgV9Z3YuSbxGb2b2Y1T6VCqtU2osui7vhG", # "44h/1h/0h/0/7" + address="mgV9Z3YuSbxGb2b2Y1T6VCqtU2osui7vhG", # "m/44h/1h/0h/0/7" amount=500_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -512,7 +513,7 @@ def test_lots_of_change(client): cnt = 20 for i in range(cnt): out = messages.TxOutputType( - address_n=parse_path(f"44h/1h/0h/1/{i}"), + address_n=parse_path(f"m/44h/1h/0h/1/{i}"), amount=(1_553_800 - 500_000 - 29_000) // cnt, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -554,18 +555,18 @@ def test_lots_of_change(client): ) -def test_fee_high_warning(client): +def test_fee_high_warning(client: Client): # input tx: 1f326f65768d55ef146efbb345bd87abe84ac7185726d0457a026fc347a26ef3 inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/10"), # 1JL3nCw76rhwK6EguU6uhe7GCa7Mq88kXg + address_n=parse_path("m/44h/0h/0h/0/10"), # 1JL3nCw76rhwK6EguU6uhe7GCa7Mq88kXg amount=3_801_747, prev_hash=TXHASH_1f326f, prev_index=0, ) out1 = messages.TxOutputType( - address="1DXKPgQU6ACQiww48chz7iPJhoV5L5bjRC", # 44h/0h/0h/0/11 + address="1DXKPgQU6ACQiww48chz7iPJhoV5L5bjRC", # m/44h/0h/0h/0/11 amount=3_801_747 - 510_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -601,19 +602,19 @@ def test_fee_high_warning(client): @pytest.mark.skip_t1 -def test_fee_high_hardfail(client): +def test_fee_high_hardfail(client: Client): # input tx: 25fee583181847cbe9d9fd9a483a8b8626c99854a72d01de848ef40508d0f3bc # (The "25fee" tx hash is very suitable for testing high fees) inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/7"), # mgV9Z3YuSbxGb2b2Y1T6VCqtU2osui7vhG + address_n=parse_path("m/44h/1h/0h/0/7"), # mgV9Z3YuSbxGb2b2Y1T6VCqtU2osui7vhG amount=129_999_808, prev_hash=TXHASH_25fee5, prev_index=0, ) out1 = messages.TxOutputType( - address="mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs", # "44h/1h/0h/0/6" + address="mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs", # "m/44h/1h/0h/0/6" amount=129_999_808 - 25_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -650,11 +651,11 @@ def test_fee_high_hardfail(client): ) -def test_not_enough_funds(client): +def test_not_enough_funds(client: Client): # input tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882 inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/0"), # 1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL + address_n=parse_path("m/44h/0h/0h/0/0"), # 1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, @@ -679,11 +680,11 @@ def test_not_enough_funds(client): btc.sign_tx(client, "Bitcoin", [inp1], [out1], prev_txes=TX_CACHE_MAINNET) -def test_p2sh(client): +def test_p2sh(client: Client): # input tx: 58d56a5d1325cf83543ee4c87fd73a784e4ba1499ced574be359fa2bdcb9ac8e inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/2"), # mgswWyysmViMqYmn5XEj1pVz7rVUftVEBP + address_n=parse_path("m/44h/1h/0h/0/2"), # mgswWyysmViMqYmn5XEj1pVz7rVUftVEBP amount=50_000, prev_hash=TXHASH_58d56a, prev_index=0, @@ -724,13 +725,13 @@ def test_p2sh(client): ) -def test_testnet_big_amount(client): +def test_testnet_big_amount(client: Client): # This test is testing transaction with amount bigger than fits to uint32 # input tx: 074b0070939db4c2635c1bef0c8e68412ccc8d3c8782137547c7a2bbde073fc0 inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/6"), # mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs + address_n=parse_path("m/44h/1h/0h/0/6"), # mnY26FLTzfC94mDoUcyDJh1GVE3LuAUMbs amount=4_500_000_000, prev_hash=TXHASH_074b00, prev_index=1, @@ -751,31 +752,31 @@ def test_testnet_big_amount(client): ) -def test_attack_change_outputs(client): +def test_attack_change_outputs(client: Client): # input tx: ac4ca0e7827a1228f44449cb57b4b9a809a667ca044dc43bb124627fed4bc10a inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/55"), # 14nw9rFTWGUncHZjSqpPSJQaptWW7iRRB8 + address_n=parse_path("m/44h/0h/0h/0/55"), # 14nw9rFTWGUncHZjSqpPSJQaptWW7iRRB8 amount=10_000, prev_hash=TXHASH_ac4ca0, prev_index=1, ) inp2 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/1/7"), # 16hgR6bjr99X6NhrsWuDR6NLpCLEacUNk + address_n=parse_path("m/44h/0h/0h/1/7"), # 16hgR6bjr99X6NhrsWuDR6NLpCLEacUNk amount=83_130, prev_hash=TXHASH_ac4ca0, prev_index=0, ) out1 = messages.TxOutputType( - address_n=parse_path("44h/0h/0h/1/8"), # 1CJzc38F82zBUnMKWxeUqMepkPRmo2BGHt + address_n=parse_path("m/44h/0h/0h/1/8"), # 1CJzc38F82zBUnMKWxeUqMepkPRmo2BGHt amount=71_790, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address="1ByqmhXkC6U5GuUNnAhJsuEVjHt5GhEuJL", # 44h/0h/1h/0/17 + address="1ByqmhXkC6U5GuUNnAhJsuEVjHt5GhEuJL", # m/44h/0h/1h/0/17 amount=10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -851,7 +852,7 @@ def test_attack_change_outputs(client): ) -def test_attack_modify_change_address(client): +def test_attack_modify_change_address(client: Client): # Ensure that if the change output is modified after the user confirms the # transaction, then signing fails. @@ -859,7 +860,7 @@ def test_attack_modify_change_address(client): # output tx 87be0736f202f7c2bff0781b42bad3e0cdcb54761939da69ea793a3735552c56 inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q + address_n=parse_path("m/44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, @@ -872,7 +873,7 @@ def test_attack_modify_change_address(client): ) out2 = messages.TxOutputType( - address_n=parse_path("44h/1h/0h/1/0"), # mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ + address_n=parse_path("m/44h/1h/0h/1/0"), # mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ amount=900_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -900,11 +901,11 @@ def test_attack_modify_change_address(client): btc.sign_tx(client, "Testnet", [inp1], [out1, out2], prev_txes=TX_CACHE_TESTNET) -def test_attack_change_input_address(client): +def test_attack_change_input_address(client: Client): # input tx: d2dcdaf547ea7f57a713c607f15e883ddc4a98167ee2c43ed953c53cb5153e24 inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/4h/0/0"), # moUJnmge8SRXuediK7bW6t4YfrPqbE6hD7 + address_n=parse_path("m/44h/1h/4h/0/0"), # moUJnmge8SRXuediK7bW6t4YfrPqbE6hD7 prev_hash=TXHASH_d2dcda, amount=123_400_000, prev_index=1, @@ -912,13 +913,13 @@ def test_attack_change_input_address(client): ) out1 = messages.TxOutputType( - address="mwue7mokpBRAsJtHqEMcRPanYBmsSmYKvY", # 44h/1h/4h/0/2 + address="mwue7mokpBRAsJtHqEMcRPanYBmsSmYKvY", # m/44h/1h/4h/0/2 amount=100_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("44h/1h/4h/1/0"), # n48agDCKBPbMLu1FYSKEpFJLradG3wgdY9 + address_n=parse_path("m/44h/1h/4h/1/0"), # n48agDCKBPbMLu1FYSKEpFJLradG3wgdY9 amount=123_400_000 - 5_000 - 100_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -979,9 +980,9 @@ def test_attack_change_input_address(client): assert exc.value.message.endswith("Transaction has changed during signing") -def test_spend_coinbase(client): +def test_spend_coinbase(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q + address_n=parse_path("m/44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q amount=2_500_278_230, prev_hash=TXHASH_d6da21, prev_index=0, @@ -1021,12 +1022,12 @@ def test_spend_coinbase(client): ) -def test_two_changes(client): +def test_two_changes(client: Client): # input tx: e5040e1bc1ae7667ffb9e5248e90b2fb93cd9150234151ce90e14ab2f5933bcd # see 87be0736f202f7c2bff0781b42bad3e0cdcb54761939da69ea793a3735552c56 inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q + address_n=parse_path("m/44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, @@ -1039,13 +1040,13 @@ def test_two_changes(client): ) out_change1 = messages.TxOutputType( - address_n=parse_path("44h/1h/0h/1/0"), # mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ + address_n=parse_path("m/44h/1h/0h/1/0"), # mm6kLYbGEL1tGe4ZA8xacfgRPdW1NLjCbZ amount=900_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out_change2 = messages.TxOutputType( - address_n=parse_path("44h/1h/0h/1/1"), # mjXZwmEi1z1MzveZrKUAo4DBgbdq4sBYT6 + address_n=parse_path("m/44h/1h/0h/1/1"), # mjXZwmEi1z1MzveZrKUAo4DBgbdq4sBYT6 amount=10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -1084,12 +1085,12 @@ def test_two_changes(client): ) -def test_change_on_main_chain_allowed(client): +def test_change_on_main_chain_allowed(client: Client): # input tx: e5040e1bc1ae7667ffb9e5248e90b2fb93cd9150234151ce90e14ab2f5933bcd # see 87be0736f202f7c2bff0781b42bad3e0cdcb54761939da69ea793a3735552c56 inp1 = messages.TxInputType( - address_n=parse_path("44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q + address_n=parse_path("m/44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, @@ -1103,7 +1104,7 @@ def test_change_on_main_chain_allowed(client): # change on main chain is allowed => treated as a change out_change = messages.TxOutputType( - address_n=parse_path("44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q + address_n=parse_path("m/44h/1h/0h/0/0"), # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q amount=900_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -1139,7 +1140,7 @@ def test_change_on_main_chain_allowed(client): ) -def test_not_enough_vouts(client): +def test_not_enough_vouts(client: Client): # input tx: ac4ca0e7827a1228f44449cb57b4b9a809a667ca044dc43bb124627fed4bc10a prev_tx = TX_CACHE_MAINNET[TXHASH_ac4ca0] @@ -1149,20 +1150,20 @@ def test_not_enough_vouts(client): # vout[0] and vout[1] exist inp0 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/55"), # 14nw9rFTWGUncHZjSqpPSJQaptWW7iRRB8 + address_n=parse_path("m/44h/0h/0h/0/55"), # 14nw9rFTWGUncHZjSqpPSJQaptWW7iRRB8 amount=10_000, prev_hash=TXHASH_ac4ca0, prev_index=1, ) inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/1/7"), # 16hgR6bjr99X6NhrsWuDR6NLpCLEacUNk + address_n=parse_path("m/44h/0h/0h/1/7"), # 16hgR6bjr99X6NhrsWuDR6NLpCLEacUNk amount=83_130, prev_hash=TXHASH_ac4ca0, prev_index=0, ) # vout[2] does not exist inp2 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/1/0"), # 1DyHzbQUoQEsLxJn6M7fMD8Xdt1XvNiwNE + address_n=parse_path("m/44h/0h/0h/1/0"), # 1DyHzbQUoQEsLxJn6M7fMD8Xdt1XvNiwNE prev_hash=TXHASH_ac4ca0, amount=100_000_000, prev_index=2, @@ -1197,9 +1198,9 @@ def test_not_enough_vouts(client): ("branch_id", 13), ), ) -def test_prevtx_forbidden_fields(client, field, value): +def test_prevtx_forbidden_fields(client: Client, field, value): inp0 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/0"), # 1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL + address_n=parse_path("m/44h/0h/0h/0/0"), # 1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL prev_hash=TXHASH_157041, amount=100_000_000, prev_index=0, @@ -1223,9 +1224,9 @@ def test_prevtx_forbidden_fields(client, field, value): "field, value", (("expiry", 9), ("timestamp", 42), ("version_group_id", 69), ("branch_id", 13)), ) -def test_signtx_forbidden_fields(client, field, value): +def test_signtx_forbidden_fields(client: Client, field, value): inp0 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/0"), # 1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL + address_n=parse_path("m/44h/0h/0h/0/0"), # 1JAd7XCBzGudGpJQSDSfpmJhiygtLQWaGL prev_hash=TXHASH_157041, amount=100_000_000, prev_index=0, @@ -1248,8 +1249,8 @@ def test_signtx_forbidden_fields(client, field, value): "script_type", (messages.InputScriptType.SPENDADDRESS, messages.InputScriptType.EXTERNAL), ) -def test_incorrect_input_script_type(client, script_type): - address_n = parse_path("44h/1h/0h/0/0") # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q +def test_incorrect_input_script_type(client: Client, script_type): + address_n = parse_path("m/44h/1h/0h/0/0") # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q attacker_multisig_public_key = bytes.fromhex( "030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0" ) @@ -1302,8 +1303,8 @@ def test_incorrect_input_script_type(client, script_type): messages.OutputScriptType.PAYTOSCRIPTHASH, ), ) -def test_incorrect_output_script_type(client, script_type): - address_n = parse_path("44h/1h/0h/0/0") # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q +def test_incorrect_output_script_type(client: Client, script_type): + address_n = parse_path("m/44h/1h/0h/0/0") # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q attacker_multisig_public_key = bytes.fromhex( "030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0" ) @@ -1352,11 +1353,11 @@ def test_incorrect_output_script_type(client, script_type): "lock_time, sequence", ((499_999_999, 0xFFFFFFFE), (500_000_000, 0xFFFFFFFE), (1, 0xFFFFFFFF)), ) -def test_lock_time(client, lock_time, sequence): +def test_lock_time(client: Client, lock_time, sequence): # input tx: 0dac366fd8a67b2a89fbb0d31086e7acded7a5bbf9ef9daa935bc873229ef5b5 inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p + address_n=parse_path("m/44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p amount=63_988, prev_hash=TXHASH_0dac36, prev_index=0, @@ -1400,11 +1401,11 @@ def test_lock_time(client, lock_time, sequence): @pytest.mark.skip_t1(reason="Cannot test layouts on T1") -def test_lock_time_blockheight(client): +def test_lock_time_blockheight(client: Client): # input tx: 0dac366fd8a67b2a89fbb0d31086e7acded7a5bbf9ef9daa935bc873229ef5b5 inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p + address_n=parse_path("m/44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p amount=63_988, prev_hash=TXHASH_0dac36, prev_index=0, @@ -1449,11 +1450,11 @@ def test_lock_time_blockheight(client): @pytest.mark.parametrize( "lock_time_str", ("1985-11-05 00:53:20", "2048-08-16 22:14:00") ) -def test_lock_time_datetime(client, lock_time_str): +def test_lock_time_datetime(client: Client, lock_time_str): # input tx: 0dac366fd8a67b2a89fbb0d31086e7acded7a5bbf9ef9daa935bc873229ef5b5 inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p + address_n=parse_path("m/44h/0h/5h/0/9"), # 1H2CRJBrDMhkvCGZMW7T4oQwYbL8eVuh7p amount=63_988, prev_hash=TXHASH_0dac36, prev_index=0, diff --git a/tests/device_tests/bitcoin/test_signtx_amount_unit.py b/tests/device_tests/bitcoin/test_signtx_amount_unit.py index ad96d2049..75b35b98b 100644 --- a/tests/device_tests/bitcoin/test_signtx_amount_unit.py +++ b/tests/device_tests/bitcoin/test_signtx_amount_unit.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...tx_cache import TxCache @@ -37,23 +38,23 @@ VECTORS = ( # amount_unit @pytest.mark.parametrize("amount_unit", VECTORS) -def test_signtx(client, amount_unit): +def test_signtx(client: Client, amount_unit): inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_091446, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", - amount=5000000, + amount=5_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=12300000 - 11000 - 5000000, + amount=12_300_000 - 11_000 - 5_000_000, ) with client: _, serialized_tx = btc.sign_tx( diff --git a/tests/device_tests/bitcoin/test_signtx_external.py b/tests/device_tests/bitcoin/test_signtx_external.py index 661d06393..fb505a0a3 100644 --- a/tests/device_tests/bitcoin/test_signtx_external.py +++ b/tests/device_tests/bitcoin/test_signtx_external.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -67,13 +68,13 @@ TXHASH_4012d9 = bytes.fromhex( @pytest.mark.skip_t1 -def test_p2pkh_presigned(client): +def test_p2pkh_presigned(client: Client): inp1 = messages.TxInputType( # mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q address_n=parse_path("m/44h/1h/0h/0/0"), prev_hash=TXHASH_e5040e, prev_index=0, - amount=31000000, + amount=31_000_000, ) inp1ext = messages.TxInputType( @@ -81,7 +82,7 @@ def test_p2pkh_presigned(client): # address_n=parse_path("m/44h/1h/0h/0/0"), prev_hash=TXHASH_e5040e, prev_index=0, - amount=31000000, + amount=31_000_000, script_type=messages.InputScriptType.EXTERNAL, script_pubkey=bytes.fromhex( "76a914a579388225827d9f2fe9014add644487808c695d88ac" @@ -96,7 +97,7 @@ def test_p2pkh_presigned(client): address_n=parse_path("m/44h/1h/0h/0/1"), prev_hash=TXHASH_d830b8, prev_index=1, - amount=600000000, + amount=600_000_000, ) inp2ext = messages.TxInputType( @@ -104,7 +105,7 @@ def test_p2pkh_presigned(client): # address_n=parse_path("m/44h/1h/0h/0/1"), prev_hash=TXHASH_d830b8, prev_index=1, - amount=600000000, + amount=600_000_000, script_type=messages.InputScriptType.EXTERNAL, script_pubkey=bytes.fromhex( "76a9145b157a678a10021243307e4bb58f36375aa80e1088ac" @@ -116,13 +117,13 @@ def test_p2pkh_presigned(client): out1 = messages.TxOutputType( address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2", - amount=620000000, + amount=620_000_000, script_type=messages.OutputScriptType.PAYTOWITNESS, ) out2 = messages.TxOutputType( - address_n=parse_path("44h/1h/0h/1/0"), - amount=31000000 + 600000000 - 620000000 - 10000, + address_n=parse_path("m/44h/1h/0h/1/0"), + amount=31_000_000 + 600_000_000 - 620_000_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -164,10 +165,10 @@ def test_p2pkh_presigned(client): @pytest.mark.skip_t1 -def test_p2wpkh_in_p2sh_presigned(client): +def test_p2wpkh_in_p2sh_presigned(client: Client): inp1 = messages.TxInputType( # 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX - amount=111145789, + amount=111_145_789, prev_hash=TXHASH_091446, prev_index=1, script_type=messages.InputScriptType.EXTERNAL, @@ -178,26 +179,26 @@ def test_p2wpkh_in_p2sh_presigned(client): ), ) inp2 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( # address_n=parse_path("44'/1'/0'/0/0"), address="2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=45600000, + amount=45_600_000, ) out3 = messages.TxOutputType( address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q", - amount=111145789 + 7289000 - 11000 - 12300000 - 45600000, + amount=111_145_789 + 7_289_000 - 11_000 - 12_300_000 - 45_600_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -280,13 +281,13 @@ def test_p2wpkh_in_p2sh_presigned(client): @pytest.mark.skip_t1 -def test_p2wpkh_presigned(client): +def test_p2wpkh_presigned(client: Client): inp1 = messages.TxInputType( # tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9 address_n=parse_path("m/84h/1h/0h/0/0"), prev_hash=TXHASH_70f987, prev_index=0, - amount=100000, + amount=100_000, script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -295,7 +296,7 @@ def test_p2wpkh_presigned(client): # address_n=parse_path("m/84h/1h/0h/0/1"), prev_hash=TXHASH_65b768, prev_index=0, - amount=10000, + amount=10_000, script_type=messages.InputScriptType.EXTERNAL, script_pubkey=bytes.fromhex("0014fb7e49f4017dc951615dea221b66626189aa43b9"), script_sig=bytes.fromhex(""), @@ -306,13 +307,13 @@ def test_p2wpkh_presigned(client): out1 = messages.TxOutputType( address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2", - amount=50000, + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, ) out2 = messages.TxOutputType( - address_n=parse_path("84h/1h/0h/1/0"), - amount=100000 + 10000 - 50000 - 1000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=100_000 + 10_000 - 50_000 - 1_000, script_type=messages.OutputScriptType.PAYTOWITNESS, ) @@ -344,10 +345,10 @@ def test_p2wpkh_presigned(client): @pytest.mark.skip_t1 -def test_p2wsh_external_presigned(client): +def test_p2wsh_external_presigned(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_091446, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -372,7 +373,7 @@ def test_p2wsh_external_presigned(client): out1 = messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", - amount=12300000 + 100 - 10000, + amount=12_300_000 + 100 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -441,11 +442,11 @@ def test_p2wsh_external_presigned(client): @pytest.mark.skip_t1 -def test_p2tr_external_presigned(client): +def test_p2tr_external_presigned(client: Client): inp1 = messages.TxInputType( # tb1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq8s8a5u - address_n=parse_path("86'/1'/0'/0/0"), - amount=6800, + address_n=parse_path("m/86h/1h/0h/0/0"), + amount=6_800, prev_hash=TXHASH_df862e, prev_index=0, script_type=messages.InputScriptType.SPENDTAPROOT, @@ -453,7 +454,7 @@ def test_p2tr_external_presigned(client): inp2 = messages.TxInputType( # tb1p8tvmvsvhsee73rhym86wt435qrqm92psfsyhy6a3n5gw455znnpqm8wald # m/86'/1'/0'/0/1 for "all all ... all" seed. - amount=13000, + amount=13_000, prev_hash=TXHASH_3ac32e, prev_index=1, script_pubkey=bytes.fromhex( @@ -467,14 +468,14 @@ def test_p2tr_external_presigned(client): out1 = messages.TxOutputType( # 84'/1'/1'/0/0 address="tb1q7r9yvcdgcl6wmtta58yxf29a8kc96jkyxl7y88", - amount=15000, + amount=15_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( # tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c - address_n=parse_path("86'/1'/0'/1/0"), + address_n=parse_path("m/86h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOTAPROOT, - amount=6800 + 13000 - 200 - 15000, + amount=6_800 + 13_000 - 200 - 15_000, ) with client: client.set_expected_responses( @@ -531,24 +532,24 @@ def test_p2tr_external_presigned(client): @pytest.mark.skip_t1 -def test_p2pkh_with_proof(client): +def test_p2pkh_with_proof(client: Client): # TODO pass @pytest.mark.skip_t1 -def test_p2wpkh_in_p2sh_with_proof(client): +def test_p2wpkh_in_p2sh_with_proof(client: Client): # TODO pass @pytest.mark.skip_t1 -def test_p2wpkh_with_proof(client): +def test_p2wpkh_with_proof(client: Client): inp1 = messages.TxInputType( # seed "alcohol woman abuse must during monitor noble actual mixed trade anger aisle" # 84'/1'/0'/0/0 # tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2 - amount=100000, + amount=100_000, prev_hash=TXHASH_e5b7e2, prev_index=0, script_type=messages.InputScriptType.EXTERNAL, @@ -558,20 +559,20 @@ def test_p2wpkh_with_proof(client): ), ) inp2 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", - amount=1230000, + amount=1_230_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q", - amount=100000 + 7289000 - 11000 - 1230000, + amount=100_000 + 7_289_000 - 11_000 - 1_230_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -632,7 +633,7 @@ def test_p2wpkh_with_proof(client): @pytest.mark.setup_client( mnemonic="abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" ) -def test_p2tr_with_proof(client): +def test_p2tr_with_proof(client: Client): # Resulting TXID 48ec6dc7bb772ff18cbce0135fedda7c0e85212c7b2f85a5d0cc7a917d77c48a inp1 = messages.TxInputType( @@ -640,7 +641,7 @@ def test_p2tr_with_proof(client): # 86'/1'/2'/0/0 # tb1pyu3e8expmey3n5mhra64c9lhz8865rftmaedwa7dddxrlktuv6us6snqxg # afde2d41702948e922150825742cda3294d80d43b8e508865c1e2d648f6d4dae - amount=100892, + amount=100_892, prev_hash=TXHASH_afde2d, prev_index=2, script_type=messages.InputScriptType.EXTERNAL, @@ -652,15 +653,15 @@ def test_p2tr_with_proof(client): ), ) inp2 = messages.TxInputType( - address_n=parse_path("86'/1'/0'/0/0"), - amount=6456, + address_n=parse_path("m/86h/1h/0h/0/0"), + amount=6_456, prev_hash=TXHASH_4012d9, prev_index=0, script_type=messages.InputScriptType.SPENDTAPROOT, ) out1 = messages.TxOutputType( address="tb1puyst6yj0x3w5z253k5xt0crk2zjy36g0fzhascd4wknxfwv9h9lszyhefk", - amount=100892 + 6456 - 300, + amount=100_892 + 6_456 - 300, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -696,13 +697,13 @@ def test_p2tr_with_proof(client): @pytest.mark.skip_t1 -def test_p2wpkh_with_false_proof(client): +def test_p2wpkh_with_false_proof(client: Client): inp1 = messages.TxInputType( # tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9 address_n=parse_path("m/84h/1h/0h/0/0"), prev_hash=TXHASH_70f987, prev_index=0, - amount=100000, + amount=100_000, script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -711,7 +712,7 @@ def test_p2wpkh_with_false_proof(client): # address_n=parse_path("m/84h/1h/0h/0/1"), prev_hash=TXHASH_65b768, prev_index=0, - amount=10000, + amount=10_000, script_type=messages.InputScriptType.EXTERNAL, script_pubkey=bytes.fromhex("0014fb7e49f4017dc951615dea221b66626189aa43b9"), ownership_proof=bytes.fromhex( @@ -721,7 +722,7 @@ def test_p2wpkh_with_false_proof(client): out1 = messages.TxOutputType( address="tb1qnspxpr2xj9s2jt6qlhuvdnxw6q55jvygcf89r2", - amount=50000, + amount=50_000, script_type=messages.OutputScriptType.PAYTOWITNESS, ) diff --git a/tests/device_tests/bitcoin/test_signtx_invalid_path.py b/tests/device_tests/bitcoin/test_signtx_invalid_path.py index eb6082de8..c95304045 100644 --- a/tests/device_tests/bitcoin/test_signtx_invalid_path.py +++ b/tests/device_tests/bitcoin/test_signtx_invalid_path.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path @@ -50,13 +51,13 @@ TXHASH_5dfd1b = bytes.fromhex( # Litecoin does not have strong replay protection using SIGHASH_FORKID, # spending from Bitcoin path should fail. @pytest.mark.altcoin -def test_invalid_path_fail(client): +def test_invalid_path_fail(client: Client): # tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882 # input 0: 0.0039 BTC inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/0"), - amount=390000, + address_n=parse_path("m/44h/0h/0h/0/0"), + amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, ) @@ -64,7 +65,7 @@ def test_invalid_path_fail(client): # address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 by changing the version out1 = messages.TxOutputType( address="LfWz9wLHmqU9HoDkMg9NqbRosrHvEixeVZ", - amount=390000 - 10000, + amount=390_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -80,13 +81,13 @@ def test_invalid_path_fail(client): # Litecoin does not have strong replay protection using SIGHASH_FORKID, but # spending from Bitcoin path should pass with safety checks set to prompt. @pytest.mark.altcoin -def test_invalid_path_prompt(client): +def test_invalid_path_prompt(client: Client): # tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882 # input 0: 0.0039 BTC inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/0"), - amount=390000, + address_n=parse_path("m/44h/0h/0h/0/0"), + amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, ) @@ -94,7 +95,7 @@ def test_invalid_path_prompt(client): # address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 by changing the version out1 = messages.TxOutputType( address="LfWz9wLHmqU9HoDkMg9NqbRosrHvEixeVZ", - amount=390000 - 10000, + amount=390_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -110,13 +111,13 @@ def test_invalid_path_prompt(client): # Bcash does have strong replay protection using SIGHASH_FORKID, # spending from Bitcoin path should work. @pytest.mark.altcoin -def test_invalid_path_pass_forkid(client): +def test_invalid_path_pass_forkid(client: Client): # tx: 8cc1f4adf7224ce855cf535a5104594a0004cb3b640d6714fdb00b9128832dd5 # input 0: 0.0039 BTC inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/0"), - amount=390000, + address_n=parse_path("m/44h/0h/0h/0/0"), + amount=390_000, prev_hash=TXHASH_8cc1f4, prev_index=0, ) @@ -124,14 +125,14 @@ def test_invalid_path_pass_forkid(client): # address is converted from 1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1 to cashaddr format out1 = messages.TxOutputType( address="bitcoincash:qr0fk25d5zygyn50u5w7h6jkvctas52n0qxff9ja6r", - amount=390000 - 10000, + amount=390_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) btc.sign_tx(client, "Bcash", [inp1], [out1], prev_txes=TX_CACHE_BCASH) -def test_attack_path_segwit(client): +def test_attack_path_segwit(client: Client): # Scenario: The attacker falsely claims that the transaction uses Testnet paths to # avoid the path warning dialog, but in step6_sign_segwit_inputs() uses Bitcoin paths # to get a valid signature. @@ -142,8 +143,8 @@ def test_attack_path_segwit(client): inp1 = messages.TxInputType( # The actual input that the attcker wants to get signed. - address_n=parse_path("84'/0'/0'/0/0"), - amount=9426, + address_n=parse_path("m/84h/0h/0h/0/0"), + amount=9_426, prev_hash=TXHASH_fa80a9, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -152,8 +153,8 @@ def test_attack_path_segwit(client): # The actual input that the attcker wants to get signed. # We need this one to be from a different account, so that the match checker # allows the transaction to pass. - address_n=parse_path("84'/0'/1'/0/1"), - amount=7086, + address_n=parse_path("m/84h/0h/1h/0/1"), + amount=7_086, prev_hash=TXHASH_5dfd1b, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -163,7 +164,7 @@ def test_attack_path_segwit(client): # Attacker's Mainnet address encoded as Testnet. address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=9426 + 7086 - 500, + amount=9_426 + 7_086 - 500, ) attack_count = 6 @@ -222,19 +223,19 @@ def test_attack_path_segwit(client): @pytest.mark.skip_t1(reason="T1 only prevents using paths known to be altcoins") -def test_invalid_path_fail_asap(client): +def test_invalid_path_fail_asap(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("0"), - amount=4977040, + address_n=parse_path("m/0"), + amount=4_977_040, prev_hash=TXHASH_a5cd2a, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, - sequence=4294967293, + sequence=4_294_967_293, ) out1 = messages.TxOutputType( - address_n=parse_path("84h/0h/0h/1/0"), - amount=4977040, + address_n=parse_path("m/84h/0h/0h/1/0"), + amount=4_977_040, script_type=messages.OutputScriptType.PAYTOWITNESS, ) diff --git a/tests/device_tests/bitcoin/test_signtx_mixed_inputs.py b/tests/device_tests/bitcoin/test_signtx_mixed_inputs.py index 1933c0430..dde34e13a 100644 --- a/tests/device_tests/bitcoin/test_signtx_mixed_inputs.py +++ b/tests/device_tests/bitcoin/test_signtx_mixed_inputs.py @@ -15,6 +15,7 @@ # If not, see . from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...tx_cache import TxCache @@ -35,25 +36,25 @@ TXHASH_31bc1c = bytes.fromhex( ) -def test_non_segwit_segwit_inputs(client): +def test_non_segwit_segwit_inputs(client: Client): # First is non-segwit, second is segwit. inp1 = messages.TxInputType( - address_n=parse_path("44'/1'/0'/0/0"), - amount=31000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, ) inp2 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", - amount=31000000 + 7289000 - 1000, + amount=31_000_000 + 7_289_000 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -77,25 +78,25 @@ def test_non_segwit_segwit_inputs(client): ) -def test_segwit_non_segwit_inputs(client): +def test_segwit_non_segwit_inputs(client: Client): # First is segwit, second is non-segwit. inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) inp2 = messages.TxInputType( - address_n=parse_path("44'/1'/0'/0/0"), - amount=31000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, ) out1 = messages.TxOutputType( address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", - amount=31000000 + 7289000 - 1000, + amount=31_000_000 + 7_289_000 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -119,32 +120,32 @@ def test_segwit_non_segwit_inputs(client): ) -def test_segwit_non_segwit_segwit_inputs(client): +def test_segwit_non_segwit_segwit_inputs(client: Client): # First is segwit, second is non-segwit and third is segwit again. inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) inp2 = messages.TxInputType( - address_n=parse_path("44'/1'/0'/0/0"), - amount=31000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, ) inp3 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=1603000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=1_603_000, prev_hash=TXHASH_31bc1c, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", - amount=31000000 + 7289000 - 1000, + amount=31_000_000 + 7_289_000 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -172,31 +173,31 @@ def test_segwit_non_segwit_segwit_inputs(client): ) -def test_non_segwit_segwit_non_segwit_inputs(client): +def test_non_segwit_segwit_non_segwit_inputs(client: Client): # First is non-segwit, second is segwit and third is non-segwit again. inp1 = messages.TxInputType( - address_n=parse_path("44'/1'/0'/0/0"), - amount=31000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, ) inp2 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) inp3 = messages.TxInputType( - address_n=parse_path("44'/1'/1'/0/0"), - amount=9226912, + address_n=parse_path("m/44h/1h/1h/0/0"), + amount=9_226_912, prev_hash=TXHASH_2bac7a, prev_index=0, ) out1 = messages.TxOutputType( address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", - amount=31000000 + 7289000 - 1000, + amount=31_000_000 + 7_289_000 - 1_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) diff --git a/tests/device_tests/bitcoin/test_signtx_payreq.py b/tests/device_tests/bitcoin/test_signtx_payreq.py index c3083d628..8cbda9c3c 100644 --- a/tests/device_tests/bitcoin/test_signtx_payreq.py +++ b/tests/device_tests/bitcoin/test_signtx_payreq.py @@ -19,6 +19,7 @@ from collections import namedtuple import pytest from trezorlib import btc, messages, misc +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -45,8 +46,8 @@ def case(id, *args, altcoin=False): inputs = [ messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_091446, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -56,18 +57,18 @@ inputs = [ outputs = [ messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", - amount=5000000, + amount=5_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ), messages.TxOutputType( address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=2000000, + amount=2_000_000, ), messages.TxOutputType( # tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9 - address_n=parse_path("84h/1h/0h/0/0"), - amount=12300000 - 5000000 - 2000000 - 11000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000 - 5_000_000 - 2_000_000 - 11_000, script_type=messages.OutputScriptType.PAYTOWITNESS, ), ] @@ -77,7 +78,7 @@ memos1 = [ amount="15.9636 DASH", coin_name="Dash", slip44=5, - address_n=parse_path("44'/5'/0'/1/0"), + address_n=parse_path("m/44h/5h/0h/1/0"), ), ] @@ -86,17 +87,17 @@ memos2 = [ amount="3.1896 DASH", coin_name="Dash", slip44=5, - address_n=parse_path("44'/5'/0'/1/0"), + address_n=parse_path("m/44h/5h/0h/1/0"), ), CoinPurchaseMemo( amount="831.570802 GRS", coin_name="Groestlcoin", slip44=17, - address_n=parse_path("44'/17'/0'/0/3"), + address_n=parse_path("m/44h/17h/0h/0/3"), ), ] -memos3 = [TextMemo("Invoice #87654321."), RefundMemo(parse_path("44'/1'/0'/0/1"))] +memos3 = [TextMemo("Invoice #87654321."), RefundMemo(parse_path("m/44h/1h/0h/0/1"))] PaymentRequestParams = namedtuple( "PaymentRequestParams", ["txo_indices", "memos", "get_nonce"] @@ -130,7 +131,7 @@ SERIALIZED_TX = "010000000001018a44999c07bba32df1cacdc50987944e68e3205b4429438fd case("out12", (PaymentRequestParams([1, 2], [], get_nonce=True),)), ), ) -def test_payment_request(client, payment_request_params): +def test_payment_request(client: Client, payment_request_params): for txo in outputs: txo.payment_req_index = None @@ -175,7 +176,7 @@ def test_payment_request(client, payment_request_params): ) -def test_payment_request_details(client): +def test_payment_request_details(client: Client): # Test that payment request details are shown when requested. outputs[0].payment_req_index = 0 outputs[1].payment_req_index = 0 @@ -225,7 +226,7 @@ def test_payment_request_details(client): assert serialized_tx.hex() == SERIALIZED_TX -def test_payment_req_wrong_amount(client): +def test_payment_req_wrong_amount(client: Client): # Test wrong total amount in payment request. outputs[0].payment_req_index = 0 outputs[1].payment_req_index = 0 @@ -251,9 +252,9 @@ def test_payment_req_wrong_amount(client): ) -def test_payment_req_wrong_mac_refund(client): +def test_payment_req_wrong_mac_refund(client: Client): # Test wrong MAC in payment request memo. - memo = RefundMemo(parse_path("44'/1'/0'/1/0")) + memo = RefundMemo(parse_path("m/44h/1h/0h/1/0")) outputs[0].payment_req_index = 0 outputs[1].payment_req_index = 0 outputs[2].payment_req_index = None @@ -282,13 +283,13 @@ def test_payment_req_wrong_mac_refund(client): @pytest.mark.altcoin -def test_payment_req_wrong_mac_purchase(client): +def test_payment_req_wrong_mac_purchase(client: Client): # Test wrong MAC in payment request memo. memo = CoinPurchaseMemo( amount="22.34904 DASH", coin_name="Dash", slip44=5, - address_n=parse_path("44'/5'/0'/1/0"), + address_n=parse_path("m/44h/5h/0h/1/0"), ) outputs[0].payment_req_index = 0 outputs[1].payment_req_index = 0 @@ -317,7 +318,7 @@ def test_payment_req_wrong_mac_purchase(client): ) -def test_payment_req_wrong_output(client): +def test_payment_req_wrong_output(client: Client): # Test wrong output in payment request. outputs[0].payment_req_index = 0 outputs[1].payment_req_index = 0 diff --git a/tests/device_tests/bitcoin/test_signtx_prevhash.py b/tests/device_tests/bitcoin/test_signtx_prevhash.py index 009875879..d588361ea 100644 --- a/tests/device_tests/bitcoin/test_signtx_prevhash.py +++ b/tests/device_tests/bitcoin/test_signtx_prevhash.py @@ -4,6 +4,7 @@ from io import BytesIO import pytest from trezorlib import btc, messages, tools +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from ...tx_cache import TxCache @@ -76,17 +77,17 @@ with_bad_prevhashes = pytest.mark.parametrize( @with_bad_prevhashes -def test_invalid_prev_hash(client, prev_hash): +def test_invalid_prev_hash(client: Client, prev_hash): inp1 = messages.TxInputType( address_n=tools.parse_path("m/44h/0h/0h/0/0"), - amount=123456789, + amount=123_456_789, prev_hash=prev_hash, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -96,18 +97,18 @@ def test_invalid_prev_hash(client, prev_hash): @with_bad_prevhashes -def test_invalid_prev_hash_attack(client, prev_hash): +def test_invalid_prev_hash_attack(client: Client, prev_hash): # prepare input with a valid prev-hash inp1 = messages.TxInputType( address_n=tools.parse_path("m/44h/0h/0h/0/0"), - amount=100000000, + amount=100_000_000, prev_hash=TXHASH_157041, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", - amount=100000000 - 10000, + amount=100_000_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -138,7 +139,7 @@ def test_invalid_prev_hash_attack(client, prev_hash): @with_bad_prevhashes -def test_invalid_prev_hash_in_prevtx(client, prev_hash): +def test_invalid_prev_hash_in_prevtx(client: Client, prev_hash): cache = TxCache("Bitcoin") prev_tx = cache[TXHASH_157041] @@ -148,13 +149,13 @@ def test_invalid_prev_hash_in_prevtx(client, prev_hash): inp0 = messages.TxInputType( address_n=tools.parse_path("m/44h/0h/0h/0/0"), - amount=100000000, + amount=100_000_000, prev_hash=tx_hash, prev_index=0, ) out1 = messages.TxOutputType( address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", - amount=99000000, + amount=99_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) btc.sign_tx(client, "Bitcoin", [inp0], [out1], prev_txes={tx_hash: prev_tx}) diff --git a/tests/device_tests/bitcoin/test_signtx_replacement.py b/tests/device_tests/bitcoin/test_signtx_replacement.py index 72227524d..05bcd5843 100644 --- a/tests/device_tests/bitcoin/test_signtx_replacement.py +++ b/tests/device_tests/bitcoin/test_signtx_replacement.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -88,10 +89,10 @@ TXHASH_8e4af7 = bytes.fromhex( ) -def test_p2pkh_fee_bump(client): +def test_p2pkh_fee_bump(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/4"), - amount=174998, + address_n=parse_path("m/44h/0h/0h/0/4"), + amount=174_998, prev_hash=TXHASH_beafc7, prev_index=0, orig_hash=TXHASH_50f6f1, @@ -99,8 +100,8 @@ def test_p2pkh_fee_bump(client): ) out1 = messages.TxOutputType( - address_n=parse_path("44h/0h/0h/1/2"), - amount=174998 - 50000 - 15000, # Originally fee was 11300, now 15000. + address_n=parse_path("m/44h/0h/0h/1/2"), + amount=174_998 - 50_000 - 15_000, # Originally fee was 11_300, now 15_000. script_type=messages.OutputScriptType.PAYTOADDRESS, orig_hash=TXHASH_50f6f1, orig_index=0, @@ -108,7 +109,7 @@ def test_p2pkh_fee_bump(client): out2 = messages.TxOutputType( address="1GA9u9TfCG7SWmKCveBumdA1TZpfom6ZdJ", - amount=50000, + amount=50_000, script_type=messages.OutputScriptType.PAYTOADDRESS, orig_hash=TXHASH_50f6f1, orig_index=1, @@ -157,17 +158,17 @@ def test_p2pkh_fee_bump(client): ) -def test_p2wpkh_op_return_fee_bump(client): +def test_p2wpkh_op_return_fee_bump(client: Client): # Original input. inp1 = messages.TxInputType( address_n=parse_path("m/84h/1h/1h/0/14"), - amount=1000000, + amount=1_000_000, script_type=messages.InputScriptType.SPENDWITNESS, prev_hash=TXHASH_408397, prev_index=1, orig_hash=TXHASH_ba917a, orig_index=0, - sequence=4294967293, + sequence=4_294_967_293, ) # Original OP_RETURN output. @@ -182,7 +183,7 @@ def test_p2wpkh_op_return_fee_bump(client): # Change-output. We bump the fee from 150 to 300. out2 = messages.TxOutputType( address_n=parse_path("m/84h/1h/1h/1/10"), - amount=999850 - 150, + amount=999_850 - 150, script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_ba917a, orig_index=1, @@ -204,11 +205,11 @@ def test_p2wpkh_op_return_fee_bump(client): # txid 48bc29fc42a64b43d043b0b7b99b21aa39654234754608f791c60bcbd91a8e92 -def test_p2tr_fee_bump(client): +def test_p2tr_fee_bump(client: Client): inp1 = messages.TxInputType( # tb1p8tvmvsvhsee73rhym86wt435qrqm92psfsyhy6a3n5gw455znnpqm8wald - address_n=parse_path("86'/1'/0'/0/1"), - amount=13000, + address_n=parse_path("m/86h/1h/0h/0/1"), + amount=13_000, orig_hash=TXHASH_8e4af7, orig_index=0, prev_hash=TXHASH_a4e274, @@ -217,8 +218,8 @@ def test_p2tr_fee_bump(client): ) inp2 = messages.TxInputType( # tb1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq8s8a5u - address_n=parse_path("86'/1'/0'/0/0"), - amount=6800, + address_n=parse_path("m/86h/1h/0h/0/0"), + amount=6_800, orig_hash=TXHASH_8e4af7, orig_index=1, prev_hash=TXHASH_ccd7ea, @@ -227,15 +228,15 @@ def test_p2tr_fee_bump(client): ) out1 = messages.TxOutputType( address="tb1qq0rurzt04d76hk7pjxhqggk7ad4zj7c9u369kt", - amount=15000, + amount=15_000, orig_hash=TXHASH_8e4af7, orig_index=0, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( # tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c - address_n=parse_path("86'/1'/0'/1/0"), - amount=4600 - 250, # bump the fee by 250 + address_n=parse_path("m/86h/1h/0h/1/0"), + amount=4_600 - 250, # bump the fee by 250 orig_hash=TXHASH_8e4af7, orig_index=1, script_type=messages.OutputScriptType.PAYTOTAPROOT, @@ -273,23 +274,23 @@ def test_p2tr_fee_bump(client): ) -def test_p2wpkh_finalize(client): +def test_p2wpkh_finalize(client: Client): # Original input with disabled RBF opt-in, i.e. we finalize the transaction. inp1 = messages.TxInputType( - address_n=parse_path("84h/1h/0h/0/2"), - amount=20000000, + address_n=parse_path("m/84h/1h/0h/0/2"), + amount=20_000_000, script_type=messages.InputScriptType.SPENDWITNESS, prev_hash=TXHASH_43d273, prev_index=1, orig_hash=TXHASH_70f987, orig_index=0, - sequence=4294967294, + sequence=4_294_967_294, ) # Original external output (actually 84h/1h/0h/0/0). out1 = messages.TxOutputType( address="tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9", - amount=100000, + amount=100_000, script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_70f987, orig_index=0, @@ -297,8 +298,8 @@ def test_p2wpkh_finalize(client): # Change output. We bump the fee from 141 to 200. out2 = messages.TxOutputType( - address_n=parse_path("84h/1h/0h/1/1"), - amount=20000000 - 100000 - 200, + address_n=parse_path("m/84h/1h/0h/1/1"), + amount=20_000_000 - 100_000 - 200, script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_70f987, orig_index=1, @@ -334,7 +335,7 @@ def test_p2wpkh_finalize(client): "Testnet", [inp1], [out1, out2], - lock_time=1348713, + lock_time=1_348_713, prev_txes=TX_CACHE_TESTNET, ) @@ -395,19 +396,19 @@ def test_p2wpkh_payjoin( ): # Original input. inp1 = messages.TxInputType( - address_n=parse_path("84h/1h/0h/0/0"), - amount=100000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=100_000, script_type=messages.InputScriptType.SPENDWITNESS, prev_hash=TXHASH_e4b5b2, prev_index=0, orig_hash=TXHASH_65b768, orig_index=0, - sequence=1516634, + sequence=1_516_634, ) # New presigned external input. (Actually 84h/1h/0h/1/1, making it easier to generate witnesses.) inp2 = messages.TxInputType( - amount=19899859, + amount=19_899_859, script_type=messages.InputScriptType.EXTERNAL, prev_hash=TXHASH_70f987, prev_index=1, @@ -427,7 +428,7 @@ def test_p2wpkh_payjoin( # Original change. out2 = messages.TxOutputType( - address_n=parse_path("84h/1h/0h/1/2"), + address_n=parse_path("m/84h/1h/0h/1/2"), amount=out2_amount, script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_65b768, @@ -471,19 +472,19 @@ def test_p2wpkh_payjoin( "Testnet", [inp1, inp2], [out1, out2], - lock_time=1516634, + lock_time=1_516_634, prev_txes=TX_CACHE_TESTNET, ) assert serialized_tx.hex() == expected_tx -def test_p2wpkh_in_p2sh_remove_change(client): +def test_p2wpkh_in_p2sh_remove_change(client: Client): # Test fee bump with change-output removal. Originally fee was 3780, now 98060. inp1 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/4"), - amount=100000, + address_n=parse_path("m/49h/1h/0h/0/4"), + amount=100_000, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_5e7667, prev_index=1, @@ -492,8 +493,8 @@ def test_p2wpkh_in_p2sh_remove_change(client): ) inp2 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/3"), - amount=998060, + address_n=parse_path("m/49h/1h/0h/0/3"), + amount=998_060, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_efaa41, prev_index=0, @@ -504,7 +505,7 @@ def test_p2wpkh_in_p2sh_remove_change(client): out1 = messages.TxOutputType( # Actually m/49'/1'/0'/0/5. address="2MvUUSiQZDSqyeSdofKX9KrSCio1nANPDTe", - amount=1000000, + amount=1_000_000, orig_hash=TXHASH_334cd7, orig_index=0, ) @@ -553,13 +554,13 @@ def test_p2wpkh_in_p2sh_remove_change(client): ) -def test_p2wpkh_in_p2sh_fee_bump_from_external(client): +def test_p2wpkh_in_p2sh_fee_bump_from_external(client: Client): # Use the change output and an external output to bump the fee. # Originally fee was 3780, now 108060 (94280 from change and 10000 from external). inp1 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/4"), - amount=100000, + address_n=parse_path("m/49h/1h/0h/0/4"), + amount=100_000, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_5e7667, prev_index=1, @@ -568,8 +569,8 @@ def test_p2wpkh_in_p2sh_fee_bump_from_external(client): ) inp2 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/3"), - amount=998060, + address_n=parse_path("m/49h/1h/0h/0/3"), + amount=998_060, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_efaa41, prev_index=0, @@ -580,7 +581,7 @@ def test_p2wpkh_in_p2sh_fee_bump_from_external(client): out1 = messages.TxOutputType( # Actually m/49'/1'/0'/0/5. address="2MvUUSiQZDSqyeSdofKX9KrSCio1nANPDTe", - amount=990000, + amount=990_000, orig_hash=TXHASH_334cd7, orig_index=0, ) @@ -633,12 +634,12 @@ def test_p2wpkh_in_p2sh_fee_bump_from_external(client): @pytest.mark.skip_t1 -def test_tx_meld(client): +def test_tx_meld(client: Client): # Meld two original transactions into one, joining the change-outputs into a different one. inp1 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/4"), - amount=100000, + address_n=parse_path("m/49h/1h/0h/0/4"), + amount=100_000, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_5e7667, prev_index=1, @@ -647,8 +648,8 @@ def test_tx_meld(client): ) inp2 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/8"), - amount=4973340, + address_n=parse_path("m/49h/1h/0h/0/8"), + amount=4_973_340, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_6673b7, prev_index=0, @@ -657,8 +658,8 @@ def test_tx_meld(client): ) inp3 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/3"), - amount=998060, + address_n=parse_path("m/49h/1h/0h/0/3"), + amount=998_060, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_efaa41, prev_index=0, @@ -667,8 +668,8 @@ def test_tx_meld(client): ) inp4 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/9"), - amount=839318869, + address_n=parse_path("m/49h/1h/0h/0/9"), + amount=839_318_869, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_927784, prev_index=0, @@ -678,7 +679,7 @@ def test_tx_meld(client): out1 = messages.TxOutputType( address="moE1dVYvebvtaMuNdXQKvu4UxUftLmS1Gt", - amount=100000000, + amount=100_000_000, orig_hash=TXHASH_ed89ac, orig_index=1, ) @@ -686,15 +687,21 @@ def test_tx_meld(client): out2 = messages.TxOutputType( # Actually m/49'/1'/0'/0/5. address="2MvUUSiQZDSqyeSdofKX9KrSCio1nANPDTe", - amount=1000000, + amount=1_000_000, orig_hash=TXHASH_334cd7, orig_index=0, ) # Change-output. Original fees were 3780 + 90720 = 94500. out3 = messages.TxOutputType( - address_n=parse_path("49h/1h/0h/1/0"), - amount=100000 + 4973340 + 998060 + 839318869 - 100000000 - 1000000 - 94500, + address_n=parse_path("m/49h/1h/0h/1/0"), + amount=100_000 + + 4_973_340 + + 998_060 + + 839_318_869 + - 100_000_000 + - 1_000_000 + - 94_500, script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, ) @@ -772,26 +779,26 @@ def test_tx_meld(client): ) -def test_attack_steal_change(client): +def test_attack_steal_change(client: Client): # Attempt to steal amount equivalent to the change in the original transaction by # hiding the fact that an output in the original transaction is a change-output. # Original input. inp1 = messages.TxInputType( - address_n=parse_path("84h/1h/0h/0/0"), - amount=100000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=100_000, script_type=messages.InputScriptType.SPENDWITNESS, prev_hash=TXHASH_e4b5b2, prev_index=0, orig_hash=TXHASH_65b768, orig_index=0, - sequence=1516634, + sequence=1_516_634, ) # New input for the attacker to steal from. inp2 = messages.TxInputType( - address_n=parse_path("84h/1h/0h/1/1"), - amount=19899859, + address_n=parse_path("m/84h/1h/0h/1/1"), + amount=19_899_859, script_type=messages.InputScriptType.SPENDWITNESS, prev_hash=TXHASH_70f987, prev_index=1, @@ -800,7 +807,7 @@ def test_attack_steal_change(client): # Original output. out1 = messages.TxOutputType( address="tb1qldlynaqp0hy4zc2aag3pkenzvxy65saesxw3wd", - amount=10000, + amount=10_000, script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_65b768, orig_index=0, @@ -809,8 +816,8 @@ def test_attack_steal_change(client): # Original change was 89859. We bump the fee from 141 to 200 and # attacker gives back what he can't steal. out2 = messages.TxOutputType( - address_n=parse_path("84h/1h/0h/1/2"), - amount=100000 - 10000 - 200 + (19899859 - 89859), + address_n=parse_path("m/84h/1h/0h/1/2"), + amount=100_000 - 10_000 - 200 + (19_899_859 - 89_859), script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_65b768, orig_index=1, @@ -819,7 +826,7 @@ def test_attack_steal_change(client): # Attacker's new output. out3 = messages.TxOutputType( address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu", - amount=89859, + amount=89_859, ) # Attacker hides the fact that second output of 65b768 is a change-output. @@ -837,21 +844,21 @@ def test_attack_steal_change(client): "Testnet", [inp1, inp2], [out1, out2, out3], - lock_time=1516634, + lock_time=1_516_634, prev_txes=prev_txes, ) @pytest.mark.skip_t1 -def test_attack_false_internal(client): +def test_attack_false_internal(client: Client): # Falsely claim that an external input is internal in the original transaction. # If this were possible, it would allow an attacker to make it look like the # user was spending more in the original than they actually were, making it # possible for the attacker to steal the difference. inp1 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/4"), - amount=100000, + address_n=parse_path("m/49h/1h/0h/0/4"), + amount=100_000, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_5e7667, prev_index=1, @@ -862,7 +869,7 @@ def test_attack_false_internal(client): inp2 = messages.TxInputType( # Actually 49h/1h/0h/0/3, but we will make it look like it's external, # while in the original it will show up as intenal. - amount=998060, + amount=998_060, script_type=messages.InputScriptType.EXTERNAL, prev_hash=TXHASH_efaa41, prev_index=0, @@ -878,7 +885,7 @@ def test_attack_false_internal(client): out1 = messages.TxOutputType( # Actually m/49'/1'/0'/0/5. address="2MvUUSiQZDSqyeSdofKX9KrSCio1nANPDTe", - amount=1000000 + 94280, + amount=1_000_000 + 94_280, orig_hash=TXHASH_334cd7, orig_index=0, ) @@ -895,15 +902,15 @@ def test_attack_false_internal(client): ) -def test_attack_fake_int_input_amount(client): +def test_attack_fake_int_input_amount(client: Client): # Give a fake input amount for an original internal input while giving the correct # amount for the replacement input. If an attacker could increase the amount of an # internal input in the original transaction, then they could bump the fee of the # transaction without the user noticing. inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/4"), - amount=174998, + address_n=parse_path("m/44h/0h/0h/0/4"), + amount=174_998, prev_hash=TXHASH_beafc7, prev_index=0, orig_hash=TXHASH_50f6f1, @@ -911,8 +918,8 @@ def test_attack_fake_int_input_amount(client): ) out1 = messages.TxOutputType( - address_n=parse_path("44h/0h/0h/1/2"), - amount=174998 + address_n=parse_path("m/44h/0h/0h/1/2"), + amount=174_998 - 50000 - 111300, # Original fee was 11300, attacker increases it by 100000. script_type=messages.OutputScriptType.PAYTOADDRESS, @@ -922,7 +929,7 @@ def test_attack_fake_int_input_amount(client): out2 = messages.TxOutputType( address="1GA9u9TfCG7SWmKCveBumdA1TZpfom6ZdJ", - amount=50000, + amount=50_000, script_type=messages.OutputScriptType.PAYTOADDRESS, orig_hash=TXHASH_50f6f1, orig_index=1, @@ -950,15 +957,15 @@ def test_attack_fake_int_input_amount(client): @pytest.mark.skip_t1 -def test_attack_fake_ext_input_amount(client): +def test_attack_fake_ext_input_amount(client: Client): # Give a fake input amount for an original external input while giving the correct # amount for the replacement input. If an attacker could decrease the amount of an # external input in the original transaction, then they could steal the fee from # the transaction without the user noticing. inp1 = messages.TxInputType( - address_n=parse_path("49h/1h/0h/0/8"), - amount=4973340, + address_n=parse_path("m/49h/1h/0h/0/8"), + amount=4_973_340, script_type=messages.InputScriptType.SPENDP2SHWITNESS, prev_hash=TXHASH_6673b7, prev_index=0, @@ -969,7 +976,7 @@ def test_attack_fake_ext_input_amount(client): inp2 = messages.TxInputType( # Actually 49h/1h/0h/0/9, but we will make it look like it's external, # so that we can try out this scenario, i.e. not a part of the attack. - amount=839318869, + amount=839_318_869, script_type=messages.InputScriptType.EXTERNAL, prev_hash=TXHASH_927784, prev_index=0, @@ -985,15 +992,15 @@ def test_attack_fake_ext_input_amount(client): # Attacker adds 30000, but it could even go to a new output. out1 = messages.TxOutputType( address="moE1dVYvebvtaMuNdXQKvu4UxUftLmS1Gt", - amount=100000000 + 30000, + amount=100_000_000 + 30_000, orig_hash=TXHASH_ed89ac, orig_index=1, ) # Change-output. Original fee was 90720, attacker steals 30000. out2 = messages.TxOutputType( - address_n=parse_path("49h/1h/0h/1/6"), - amount=4973340 + 839318869 - (100000000 + 30000) - 60720, + address_n=parse_path("m/49h/1h/0h/1/6"), + amount=4_973_340 + 839_318_869 - (100_000_000 + 30_000) - 60_720, script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, ) @@ -1025,25 +1032,25 @@ def test_attack_fake_ext_input_amount(client): ) -def test_p2wpkh_invalid_signature(client): +def test_p2wpkh_invalid_signature(client: Client): # Ensure that transaction replacement fails when the original signature is invalid. # Original input with disabled RBF opt-in, i.e. we finalize the transaction. inp1 = messages.TxInputType( - address_n=parse_path("84h/1h/0h/0/2"), - amount=20000000, + address_n=parse_path("m/84h/1h/0h/0/2"), + amount=20_000_000, script_type=messages.InputScriptType.SPENDWITNESS, prev_hash=TXHASH_43d273, prev_index=1, orig_hash=TXHASH_70f987, orig_index=0, - sequence=4294967294, + sequence=4_294_967_294, ) # Original external output (actually 84h/1h/0h/0/0). out1 = messages.TxOutputType( address="tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9", - amount=100000, + amount=100_000, script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_70f987, orig_index=0, @@ -1051,8 +1058,8 @@ def test_p2wpkh_invalid_signature(client): # Change output. We bump the fee from 141 to 200. out2 = messages.TxOutputType( - address_n=parse_path("84h/1h/0h/1/1"), - amount=20000000 - 100000 - 200, + address_n=parse_path("m/84h/1h/0h/1/1"), + amount=20_000_000 - 100_000 - 200, script_type=messages.OutputScriptType.PAYTOWITNESS, orig_hash=TXHASH_70f987, orig_index=1, @@ -1073,18 +1080,18 @@ def test_p2wpkh_invalid_signature(client): "Testnet", [inp1], [out1, out2], - lock_time=1348713, + lock_time=1_348_713, prev_txes=prev_txes, ) -def test_p2tr_invalid_signature(client): +def test_p2tr_invalid_signature(client: Client): # Ensure that transaction replacement fails when the original signature is invalid. inp1 = messages.TxInputType( # tb1p8tvmvsvhsee73rhym86wt435qrqm92psfsyhy6a3n5gw455znnpqm8wald - address_n=parse_path("86'/1'/0'/0/1"), - amount=13000, + address_n=parse_path("m/86h/1h/0h/0/1"), + amount=13_000, orig_hash=TXHASH_8e4af7, orig_index=0, prev_hash=TXHASH_a4e274, @@ -1093,8 +1100,8 @@ def test_p2tr_invalid_signature(client): ) inp2 = messages.TxInputType( # tb1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq8s8a5u - address_n=parse_path("86'/1'/0'/0/0"), - amount=6800, + address_n=parse_path("m/86h/1h/0h/0/0"), + amount=6_800, orig_hash=TXHASH_8e4af7, orig_index=1, prev_hash=TXHASH_ccd7ea, @@ -1103,15 +1110,15 @@ def test_p2tr_invalid_signature(client): ) out1 = messages.TxOutputType( address="tb1qq0rurzt04d76hk7pjxhqggk7ad4zj7c9u369kt", - amount=15000, + amount=15_000, orig_hash=TXHASH_8e4af7, orig_index=0, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( # tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c - address_n=parse_path("86'/1'/0'/1/0"), - amount=4600 - 250, # bump the fee by 250 + address_n=parse_path("m/86h/1h/0h/1/0"), + amount=4_600 - 250, # bump the fee by 250 orig_hash=TXHASH_8e4af7, orig_index=1, script_type=messages.OutputScriptType.PAYTOTAPROOT, diff --git a/tests/device_tests/bitcoin/test_signtx_segwit.py b/tests/device_tests/bitcoin/test_signtx_segwit.py index 709790f4c..aebf1b9ab 100644 --- a/tests/device_tests/bitcoin/test_signtx_segwit.py +++ b/tests/device_tests/bitcoin/test_signtx_segwit.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path @@ -40,24 +41,24 @@ TXHASH_e5040e = bytes.fromhex( ) -def test_send_p2sh(client): +def test_send_p2sh(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), # 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX - amount=123456789, + amount=123_456_789, prev_hash=TXHASH_20912f, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=123456789 - 11000 - 12300000, + amount=123_456_789 - 11_000 - 12_300_000, ) with client: client.set_expected_responses( @@ -90,24 +91,24 @@ def test_send_p2sh(client): ) -def test_send_p2sh_change(client): +def test_send_p2sh_change(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), # 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX - amount=123456789, + amount=123_456_789, prev_hash=TXHASH_20912f, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, - amount=123456789 - 11000 - 12300000, + amount=123_456_789 - 11_000 - 12_300_000, ) with client: client.set_expected_responses( @@ -139,18 +140,18 @@ def test_send_p2sh_change(client): ) -def test_testnet_segwit_big_amount(client): +def test_testnet_segwit_big_amount(client: Client): # This test is testing transaction with amount bigger than fits to uint32 inp1 = messages.TxInputType( - address_n=parse_path("m/49'/1'/0'/0/0"), + address_n=parse_path("m/49h/1h/0h/0/0"), amount=2 ** 32 + 1, prev_hash=TXHASH_dee13c, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( - address="2Mt7P2BAfE922zmfXrdcYTLyR7GUvbwSEns", # seed allallall, bip32: m/49'/1'/0'/0/1, script type:p2shsegwit + address="2Mt7P2BAfE922zmfXrdcYTLyR7GUvbwSEns", # seed allallall, bip32: m/49h/1h/0h/0/1, script type:p2shsegwit amount=2 ** 32 + 1, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -180,10 +181,10 @@ def test_testnet_segwit_big_amount(client): @pytest.mark.multisig -def test_send_multisig_1(client): +def test_send_multisig_1(client: Client): nodes = [ btc.get_public_node( - client, parse_path(f"49'/1'/{i}'"), coin_name="Testnet" + client, parse_path(f"m/49h/1h/{i}h"), coin_name="Testnet" ).node for i in range(1, 4) ] @@ -193,17 +194,17 @@ def test_send_multisig_1(client): ) inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/1'/1/0"), + address_n=parse_path("m/49h/1h/1h/1/0"), prev_hash=TXHASH_9c3192, prev_index=1, script_type=messages.InputScriptType.SPENDP2SHWITNESS, multisig=multisig, - amount=1610436, + amount=1_610_436, ) out1 = messages.TxOutputType( address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", - amount=1605000, + amount=1_605_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -257,24 +258,24 @@ def test_send_multisig_1(client): ) -def test_attack_change_input_address(client): +def test_attack_change_input_address(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), # 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX - amount=123456789, + amount=123_456_789, prev_hash=TXHASH_20912f, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("49'/1'/12'/1/0"), + address_n=parse_path("m/49h/1h/12h/1/0"), script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, - amount=123456789 - 11000 - 12300000, + amount=123_456_789 - 11_000 - 12_300_000, ) # Test if the transaction can be signed normally @@ -344,20 +345,20 @@ def test_attack_change_input_address(client): assert exc.value.message.endswith("Transaction has changed during signing") -def test_attack_mixed_inputs(client): +def test_attack_mixed_inputs(client: Client): TRUE_AMOUNT = 123456789 FAKE_AMOUNT = 120000000 inp1 = messages.TxInputType( - address_n=parse_path("44'/1'/0'/0/0"), - amount=31000000, + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=31_000_000, prev_hash=TXHASH_e5040e, prev_index=0, script_type=messages.InputScriptType.SPENDADDRESS, sequence=0xFFFFFFFD, ) inp2 = messages.TxInputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), amount=TRUE_AMOUNT, prev_hash=TXHASH_20912f, prev_index=0, @@ -366,7 +367,7 @@ def test_attack_mixed_inputs(client): ) out1 = messages.TxOutputType( address="mhRx1CeVfaayqRwq5zgRQmD7W5aWBfD5mC", - amount=31000000 + TRUE_AMOUNT - 3456789, + amount=31_000_000 + TRUE_AMOUNT - 3_456_789, script_type=messages.OutputScriptType.PAYTOADDRESS, ) diff --git a/tests/device_tests/bitcoin/test_signtx_segwit_native.py b/tests/device_tests/bitcoin/test_signtx_segwit_native.py index fb1d27ca8..6ddd9f84a 100644 --- a/tests/device_tests/bitcoin/test_signtx_segwit_native.py +++ b/tests/device_tests/bitcoin/test_signtx_segwit_native.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import H_, parse_path from ...bip32 import deserialize @@ -58,24 +59,24 @@ TXHASH_ec16dc = bytes.fromhex( ) -def test_send_p2sh(client): +def test_send_p2sh(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), # 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX - amount=123456789, + amount=123_456_789, prev_hash=TXHASH_20912f, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=123456789 - 11000 - 12300000, + amount=123_456_789 - 11_000 - 12_300_000, ) with client: client.set_expected_responses( @@ -108,24 +109,24 @@ def test_send_p2sh(client): ) -def test_send_p2sh_change(client): +def test_send_p2sh_change(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), # 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX - amount=123456789, + amount=123_456_789, prev_hash=TXHASH_20912f, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) out1 = messages.TxOutputType( address="tb1qqzv60m9ajw8drqulta4ld4gfx0rdh82un5s65s", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, - amount=123456789 - 11000 - 12300000, + amount=123_456_789 - 11_000 - 12_300_000, ) with client: client.set_expected_responses( @@ -157,23 +158,23 @@ def test_send_p2sh_change(client): ) -def test_send_native(client): +def test_send_native(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_091446, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", - amount=5000000, + amount=5_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=12300000 - 11000 - 5000000, + amount=12_300_000 - 11_000 - 5_000_000, ) with client: client.set_expected_responses( @@ -206,23 +207,23 @@ def test_send_native(client): ) -def test_send_to_taproot(client): +def test_send_to_taproot(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=10000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=10_000, prev_hash=TXHASH_ec16dc, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="tb1pdvdljpj774356dpk32c2ks0yqv7q7c4f98px2d9e76s73vpudpxs7tl6vp", - amount=7000, + amount=7_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( address="tb1qcc4ext5rsa8pzqa2m030jk670wmn5f649pu7sr", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=10000 - 7000 - 200, + amount=10_000 - 7_000 - 200, ) with client: _, serialized_tx = btc.sign_tx( @@ -235,23 +236,23 @@ def test_send_to_taproot(client): ) -def test_send_native_change(client): +def test_send_native_change(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_091446, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", - amount=5000000, + amount=5_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("84'/1'/0'/1/0"), + address_n=parse_path("m/84h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOWITNESS, - amount=12300000 - 11000 - 5000000, + amount=12_300_000 - 11_000 - 5_000_000, ) with client: client.set_expected_responses( @@ -283,25 +284,25 @@ def test_send_native_change(client): ) -def test_send_both(client): +def test_send_both(client: Client): inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/0'/1/0"), + address_n=parse_path("m/49h/1h/0h/1/0"), # 2N1LGaGg836mqSQqiuUBLfcyGBhyZbremDX - amount=111145789, + amount=111_145_789, prev_hash=TXHASH_091446, prev_index=1, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) inp2 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) out1 = messages.TxOutputType( address="tb1q54un3q39sf7e7tlfq99d6ezys7qgc62a6rxllc", - amount=12300000, + amount=12_300_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( @@ -309,11 +310,11 @@ def test_send_both(client): # script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, address="2N6UeBoqYEEnybg4cReFYDammpsyDw8R2Mc", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=45600000, + amount=45_600_000, ) out3 = messages.TxOutputType( address="mvbu1Gdy8SUjTenqerxUaZyYjmveZvt33q", - amount=111145789 + 7289000 - 11000 - 12300000 - 45600000, + amount=111_145_789 + 7_289_000 - 11_000 - 12_300_000 - 45_600_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -360,9 +361,11 @@ def test_send_both(client): @pytest.mark.multisig -def test_send_multisig_1(client): +def test_send_multisig_1(client: Client): nodes = [ - btc.get_public_node(client, parse_path(f"49'/1'/{index}'"), coin_name="Testnet") + btc.get_public_node( + client, parse_path(f"m/49h/1h/{index}h"), coin_name="Testnet" + ) for index in range(1, 4) ] multisig = messages.MultisigRedeemScriptType( @@ -373,17 +376,17 @@ def test_send_multisig_1(client): ) inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/1'/0/0"), + address_n=parse_path("m/49h/1h/1h/0/0"), prev_hash=TXHASH_9c3192, prev_index=1, script_type=messages.InputScriptType.SPENDP2SHWITNESS, multisig=multisig, - amount=1610436, + amount=1_610_436, ) out1 = messages.TxOutputType( address="tb1qch62pf820spe9mlq49ns5uexfnl6jzcezp7d328fw58lj0rhlhasge9hzy", - amount=1605000, + amount=1_605_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -438,9 +441,11 @@ def test_send_multisig_1(client): @pytest.mark.multisig -def test_send_multisig_2(client): +def test_send_multisig_2(client: Client): nodes = [ - btc.get_public_node(client, parse_path(f"84'/1'/{index}'"), coin_name="Testnet") + btc.get_public_node( + client, parse_path(f"m/84h/1h/{index}h"), coin_name="Testnet" + ) for index in range(1, 4) ] multisig = messages.MultisigRedeemScriptType( @@ -451,17 +456,17 @@ def test_send_multisig_2(client): ) inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/2'/0/1"), + address_n=parse_path("m/84h/1h/2h/0/1"), prev_hash=TXHASH_f41cbe, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, multisig=multisig, - amount=1605000, + amount=1_605_000, ) out1 = messages.TxOutputType( address="tb1qr6xa5v60zyt3ry9nmfew2fk5g9y3gerkjeu6xxdz7qga5kknz2ssld9z2z", - amount=1604000, + amount=1_604_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -514,9 +519,11 @@ def test_send_multisig_2(client): @pytest.mark.multisig -def test_send_multisig_3_change(client): +def test_send_multisig_3_change(client: Client): nodes = [ - btc.get_public_node(client, parse_path(f"84'/1'/{index}'"), coin_name="Testnet") + btc.get_public_node( + client, parse_path(f"m/84h/1h/{index}h"), coin_name="Testnet" + ) for index in range(1, 4) ] multisig = messages.MultisigRedeemScriptType( @@ -533,17 +540,17 @@ def test_send_multisig_3_change(client): ) inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/1'/1/0"), + address_n=parse_path("m/84h/1h/1h/1/0"), prev_hash=TXHASH_c93480, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, multisig=multisig, - amount=1604000, + amount=1_604_000, ) out1 = messages.TxOutputType( - address_n=parse_path("84'/1'/1'/1/1"), - amount=1603000, + address_n=parse_path("m/84h/1h/1h/1/1"), + amount=1_603_000, multisig=multisig2, script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, ) @@ -596,9 +603,11 @@ def test_send_multisig_3_change(client): @pytest.mark.multisig -def test_send_multisig_4_change(client): +def test_send_multisig_4_change(client: Client): nodes = [ - btc.get_public_node(client, parse_path(f"49'/1'/{index}'"), coin_name="Testnet") + btc.get_public_node( + client, parse_path(f"m/49h/1h/{index}h"), coin_name="Testnet" + ) for index in range(1, 4) ] multisig = messages.MultisigRedeemScriptType( @@ -615,17 +624,17 @@ def test_send_multisig_4_change(client): ) inp1 = messages.TxInputType( - address_n=parse_path("49'/1'/1'/1/1"), + address_n=parse_path("m/49h/1h/1h/1/1"), prev_hash=TXHASH_31bc1c, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, multisig=multisig, - amount=1603000, + amount=1_603_000, ) out1 = messages.TxOutputType( - address_n=parse_path("49'/1'/1'/1/2"), - amount=1602000, + address_n=parse_path("m/49h/1h/1h/1/2"), + amount=1_602_000, multisig=multisig2, script_type=messages.OutputScriptType.PAYTOWITNESS, ) @@ -679,7 +688,7 @@ def test_send_multisig_4_change(client): # Ensure that if there is a non-multisig input, then a multisig output # will not be identified as a change output. -def test_multisig_mismatch_inputs_single(client): +def test_multisig_mismatch_inputs_single(client: Client): # m/84'/1'/0' for "alcohol woman abuse ..." seed. node_int = deserialize( "Vpub5kFDCYhiYuAzjk7TBQPNFffbexHF7iAd8AVVgHQKUany7e6NQvthgk86d7DfH57DY2dwBK4PyVTDDaS1r2gjkdyJyUYGoV9qNujGSrW9Dpe" @@ -700,15 +709,15 @@ def test_multisig_mismatch_inputs_single(client): ) inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/0h/0/0"), + amount=12_300_000, prev_hash=TXHASH_091446, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, ) inp2 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/0/0"), + address_n=parse_path("m/84h/1h/0h/0/0"), prev_hash=TXHASH_a345b8, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -718,15 +727,15 @@ def test_multisig_mismatch_inputs_single(client): out1 = messages.TxOutputType( address="2N4Q5FhU2497BryFfUgbqkAJE87aKHUhXMp", - amount=5000000, + amount=5_000_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( - address_n=parse_path("84'/1'/0'/1/0"), + address_n=parse_path("m/84h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOWITNESS, multisig=multisig_out, - amount=12300000 + 100 - 5000000 - 10000, + amount=12_300_000 + 100 - 5_000_000 - 10_000, ) with client: diff --git a/tests/device_tests/bitcoin/test_signtx_taproot.py b/tests/device_tests/bitcoin/test_signtx_taproot.py index d1fe2ae23..f4291eb23 100644 --- a/tests/device_tests/bitcoin/test_signtx_taproot.py +++ b/tests/device_tests/bitcoin/test_signtx_taproot.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import H_, parse_path @@ -49,11 +50,11 @@ TXHASH_65b811 = bytes.fromhex( ) -def test_send_p2tr(client): +def test_send_p2tr(client: Client): inp1 = messages.TxInputType( # tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c - address_n=parse_path("86'/1'/0'/1/0"), - amount=4600, + address_n=parse_path("m/86h/1h/0h/1/0"), + amount=4_600, prev_hash=TXHASH_7956f1, prev_index=1, script_type=messages.InputScriptType.SPENDTAPROOT, @@ -61,7 +62,7 @@ def test_send_p2tr(client): out1 = messages.TxOutputType( # 86'/1'/1'/0/0 address="tb1paxhjl357yzctuf3fe58fcdx6nul026hhh6kyldpfsf3tckj9a3wslqd7zd", - amount=4450, + amount=4_450, script_type=messages.OutputScriptType.PAYTOADDRESS, ) with client: @@ -87,19 +88,19 @@ def test_send_p2tr(client): ) -def test_send_two_with_change(client): +def test_send_two_with_change(client: Client): inp1 = messages.TxInputType( # tb1pswrqtykue8r89t9u4rprjs0gt4qzkdfuursfnvqaa3f2yql07zmq8s8a5u - address_n=parse_path("86'/1'/0'/0/0"), - amount=6800, + address_n=parse_path("m/86h/1h/0h/0/0"), + amount=6_800, prev_hash=TXHASH_df862e, prev_index=0, script_type=messages.InputScriptType.SPENDTAPROOT, ) inp2 = messages.TxInputType( # tb1p8tvmvsvhsee73rhym86wt435qrqm92psfsyhy6a3n5gw455znnpqm8wald - address_n=parse_path("86'/1'/0'/0/1"), - amount=13000, + address_n=parse_path("m/86h/1h/0h/0/1"), + amount=13_000, prev_hash=TXHASH_3ac32e, prev_index=1, script_type=messages.InputScriptType.SPENDTAPROOT, @@ -107,14 +108,14 @@ def test_send_two_with_change(client): out1 = messages.TxOutputType( # 84'/1'/1'/0/0 address="tb1q7r9yvcdgcl6wmtta58yxf29a8kc96jkyxl7y88", - amount=15000, + amount=15_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) out2 = messages.TxOutputType( # tb1pn2d0yjeedavnkd8z8lhm566p0f2utm3lgvxrsdehnl94y34txmts5s7t4c - address_n=parse_path("86'/1'/0'/1/0"), + address_n=parse_path("m/86h/1h/0h/1/0"), script_type=messages.OutputScriptType.PAYTOTAPROOT, - amount=6800 + 13000 - 200 - 15000, + amount=6_800 + 13_000 - 200 - 15_000, ) with client: client.set_expected_responses( @@ -144,52 +145,52 @@ def test_send_two_with_change(client): ) -def test_send_mixed(client): +def test_send_mixed(client: Client): inp1 = messages.TxInputType( # 2MutHjgAXkqo3jxX2DZWorLAckAnwTxSM9V - address_n=parse_path("49'/1'/1'/0/0"), - amount=20000, + address_n=parse_path("m/49h/1h/1h/0/0"), + amount=20_000, prev_hash=TXHASH_8c3ea7, prev_index=0, script_type=messages.InputScriptType.SPENDP2SHWITNESS, ) inp2 = messages.TxInputType( # tb1q7r9yvcdgcl6wmtta58yxf29a8kc96jkyxl7y88 - address_n=parse_path("84'/1'/1'/0/0"), - amount=15000, + address_n=parse_path("m/84h/1h/1h/0/0"), + amount=15_000, prev_hash=TXHASH_7956f1, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, ) inp3 = messages.TxInputType( # tb1paxhjl357yzctuf3fe58fcdx6nul026hhh6kyldpfsf3tckj9a3wslqd7zd - address_n=parse_path("86'/1'/1'/0/0"), - amount=4450, + address_n=parse_path("m/86h/1h/1h/0/0"), + amount=4_450, prev_hash=TXHASH_901593, prev_index=0, script_type=messages.InputScriptType.SPENDTAPROOT, ) inp4 = messages.TxInputType( # msUqRgCWS7ryuFcF34EaKTrsTe3xHra128 - address_n=parse_path("44'/1'/1'/0/0"), - amount=10000, + address_n=parse_path("m/44h/1h/1h/0/0"), + amount=10_000, prev_hash=TXHASH_3ac32e, prev_index=2, script_type=messages.InputScriptType.SPENDADDRESS, ) out1 = messages.TxOutputType( address="tb1q6xnnna3g7lk22h5tn8nlx2ezmndlvuk556w4w3", - amount=25000, + amount=25_000, script_type=messages.OutputScriptType.PAYTOWITNESS, ) out2 = messages.TxOutputType( address="mfnMbVFC1rH4p9GNbjkMfrAjyKRLycFAzA", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=7000, + amount=7_000, ) out3 = messages.TxOutputType( address="2MvAG8m2xSf83FgeR4ZpUtaubpLNjAMMoka", - amount=6900, + amount=6_900, script_type=messages.OutputScriptType.PAYTOP2SHWITNESS, ) out4 = messages.TxOutputType( @@ -199,7 +200,7 @@ def test_send_mixed(client): ) out5 = messages.TxOutputType( address="tb1ptgp9w0mm89ms43flw0gkrhyx75gyc6qjhtpf0jmt5sv0dufpnsrsyv9nsz", - amount=10000, + amount=10_000, script_type=messages.OutputScriptType.PAYTOTAPROOT, ) @@ -287,7 +288,7 @@ def test_send_mixed(client): ) -def test_attack_script_type(client): +def test_attack_script_type(client: Client): # Scenario: The attacker falsely claims that the transaction is Taproot-only to # avoid prev tx streaming and gives a lower amount for one of the inputs. The # correct input types and amounts are revelaled only in step6_sign_segwit_inputs() @@ -295,15 +296,15 @@ def test_attack_script_type(client): # larger than what the user confirmed. inp1 = messages.TxInputType( - address_n=parse_path("84'/1'/0'/1/0"), - amount=7289000, + address_n=parse_path("m/84h/1h/0h/1/0"), + amount=7_289_000, prev_hash=TXHASH_65b811, prev_index=1, script_type=messages.InputScriptType.SPENDWITNESS, ) inp2 = messages.TxInputType( - address_n=parse_path("84'/1'/1'/0/0"), - amount=12300000, + address_n=parse_path("m/84h/1h/1h/0/0"), + amount=12_300_000, prev_hash=TXHASH_091446, prev_index=0, script_type=messages.InputScriptType.SPENDWITNESS, @@ -312,7 +313,7 @@ def test_attack_script_type(client): out1 = messages.TxOutputType( address="tb1q694ccp5qcc0udmfwgp692u2s2hjpq5h407urtu", script_type=messages.OutputScriptType.PAYTOADDRESS, - amount=7289000 + 10000 - 1000, + amount=7_289_000 + 10_000 - 1_000, ) attack_count = 5 diff --git a/tests/device_tests/bitcoin/test_verifymessage.py b/tests/device_tests/bitcoin/test_verifymessage.py index b24564e1f..a987ab48e 100644 --- a/tests/device_tests/bitcoin/test_verifymessage.py +++ b/tests/device_tests/bitcoin/test_verifymessage.py @@ -19,9 +19,10 @@ import base64 import pytest from trezorlib import btc +from trezorlib.debuglink import TrezorClientDebugLink as Client -def test_message_long(client): +def test_message_long(client: Client): ret = btc.verify_message( client, "Bitcoin", @@ -34,7 +35,7 @@ def test_message_long(client): assert ret is True -def test_message_testnet(client): +def test_message_testnet(client: Client): ret = btc.verify_message( client, "Testnet", @@ -48,7 +49,7 @@ def test_message_testnet(client): @pytest.mark.altcoin -def test_message_grs(client): +def test_message_grs(client: Client): ret = btc.verify_message( client, "Groestlcoin", @@ -61,7 +62,7 @@ def test_message_grs(client): assert ret is True -def test_message_verify(client): +def test_message_verify(client: Client): res = btc.verify_message( client, "Bitcoin", @@ -171,7 +172,7 @@ def test_message_verify(client): @pytest.mark.altcoin -def test_message_verify_bcash(client): +def test_message_verify_bcash(client: Client): res = btc.verify_message( client, "Bcash", @@ -184,7 +185,7 @@ def test_message_verify_bcash(client): assert res is True -def test_verify_bitcoind(client): +def test_verify_bitcoind(client: Client): res = btc.verify_message( client, "Bitcoin", @@ -198,7 +199,7 @@ def test_verify_bitcoind(client): assert res is True -def test_verify_utf(client): +def test_verify_utf(client: Client): words_nfkd = u"Pr\u030ci\u0301s\u030cerne\u030c z\u030clut\u030couc\u030cky\u0301 ku\u030an\u030c u\u0301pe\u030cl d\u030ca\u0301belske\u0301 o\u0301dy za\u0301ker\u030cny\u0301 uc\u030cen\u030c be\u030cz\u030ci\u0301 pode\u0301l zo\u0301ny u\u0301lu\u030a" words_nfc = u"P\u0159\xed\u0161ern\u011b \u017elu\u0165ou\u010dk\xfd k\u016f\u0148 \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy z\xe1ke\u0159n\xfd u\u010de\u0148 b\u011b\u017e\xed pod\xe9l z\xf3ny \xfal\u016f" diff --git a/tests/device_tests/bitcoin/test_verifymessage_segwit.py b/tests/device_tests/bitcoin/test_verifymessage_segwit.py index 6622684b5..0805548d5 100644 --- a/tests/device_tests/bitcoin/test_verifymessage_segwit.py +++ b/tests/device_tests/bitcoin/test_verifymessage_segwit.py @@ -15,9 +15,10 @@ # If not, see . from trezorlib import btc +from trezorlib.debuglink import TrezorClientDebugLink as Client -def test_message_long(client): +def test_message_long(client: Client): ret = btc.verify_message( client, "Bitcoin", @@ -30,7 +31,7 @@ def test_message_long(client): assert ret is True -def test_message_testnet(client): +def test_message_testnet(client: Client): ret = btc.verify_message( client, "Testnet", @@ -43,7 +44,7 @@ def test_message_testnet(client): assert ret is True -def test_message_verify(client): +def test_message_verify(client: Client): res = btc.verify_message( client, "Bitcoin", @@ -80,7 +81,7 @@ def test_message_verify(client): assert res is False -def test_verify_utf(client): +def test_verify_utf(client: Client): words_nfkd = u"Pr\u030ci\u0301s\u030cerne\u030c z\u030clut\u030couc\u030cky\u0301 ku\u030an\u030c u\u0301pe\u030cl d\u030ca\u0301belske\u0301 o\u0301dy za\u0301ker\u030cny\u0301 uc\u030cen\u030c be\u030cz\u030ci\u0301 pode\u0301l zo\u0301ny u\u0301lu\u030a" words_nfc = u"P\u0159\xed\u0161ern\u011b \u017elu\u0165ou\u010dk\xfd k\u016f\u0148 \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy z\xe1ke\u0159n\xfd u\u010de\u0148 b\u011b\u017e\xed pod\xe9l z\xf3ny \xfal\u016f" diff --git a/tests/device_tests/bitcoin/test_verifymessage_segwit_native.py b/tests/device_tests/bitcoin/test_verifymessage_segwit_native.py index 6b7025b07..3e6d83872 100644 --- a/tests/device_tests/bitcoin/test_verifymessage_segwit_native.py +++ b/tests/device_tests/bitcoin/test_verifymessage_segwit_native.py @@ -15,9 +15,10 @@ # If not, see . from trezorlib import btc +from trezorlib.debuglink import TrezorClientDebugLink as Client -def test_message_long(client): +def test_message_long(client: Client): ret = btc.verify_message( client, "Bitcoin", @@ -30,7 +31,7 @@ def test_message_long(client): assert ret is True -def test_message_testnet(client): +def test_message_testnet(client: Client): ret = btc.verify_message( client, "Testnet", @@ -43,7 +44,7 @@ def test_message_testnet(client): assert ret is True -def test_message_verify(client): +def test_message_verify(client: Client): res = btc.verify_message( client, "Bitcoin", @@ -80,7 +81,7 @@ def test_message_verify(client): assert res is False -def test_verify_utf(client): +def test_verify_utf(client: Client): words_nfkd = u"Pr\u030ci\u0301s\u030cerne\u030c z\u030clut\u030couc\u030cky\u0301 ku\u030an\u030c u\u0301pe\u030cl d\u030ca\u0301belske\u0301 o\u0301dy za\u0301ker\u030cny\u0301 uc\u030cen\u030c be\u030cz\u030ci\u0301 pode\u0301l zo\u0301ny u\u0301lu\u030a" words_nfc = u"P\u0159\xed\u0161ern\u011b \u017elu\u0165ou\u010dk\xfd k\u016f\u0148 \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy z\xe1ke\u0159n\xfd u\u010de\u0148 b\u011b\u017e\xed pod\xe9l z\xf3ny \xfal\u016f" diff --git a/tests/device_tests/bitcoin/test_zcash.py b/tests/device_tests/bitcoin/test_zcash.py index 50f4e99a1..715ce01ae 100644 --- a/tests/device_tests/bitcoin/test_zcash.py +++ b/tests/device_tests/bitcoin/test_zcash.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -55,21 +56,21 @@ TXHASH_v4 = bytes.fromhex( pytestmark = [pytest.mark.altcoin, pytest.mark.zcash] -def test_v3_not_supported(client): +def test_v3_not_supported(client: Client): # prevout: aaf51e4606c264e47e5c42c958fe4cf1539c5172684721e38e69f4ef634d75dc:1 # input 1: 3.0 TAZ inp1 = messages.TxInputType( # tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu address_n=parse_path("m/44h/1h/0h/0/0"), - amount=300000000, + amount=300_000_000, prev_hash=TXHASH_aaf51e, prev_index=1, ) out1 = messages.TxOutputType( address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z", - amount=300000000 - 1940, + amount=300_000_000 - 1_940, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -86,21 +87,21 @@ def test_v3_not_supported(client): ) -def test_one_one_fee_sapling(client): +def test_one_one_fee_sapling(client: Client): # prevout: e3820602226974b1dd87b7113cc8aea8c63e5ae29293991e7bfa80c126930368:0 # input 1: 3.0 TAZ inp1 = messages.TxInputType( # tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu address_n=parse_path("m/44h/1h/0h/0/0"), - amount=300000000, + amount=300_000_000, prev_hash=TXHASH_e38206, prev_index=0, ) out1 = messages.TxOutputType( address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z", - amount=300000000 - 1940, + amount=300_000_000 - 1_940, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -142,17 +143,17 @@ def test_one_one_fee_sapling(client): ) -def test_version_group_id_missing(client): +def test_version_group_id_missing(client: Client): inp1 = messages.TxInputType( # tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu address_n=parse_path("m/44h/1h/0h/0/0"), - amount=300000000, + amount=300_000_000, prev_hash=TXHASH_e38206, prev_index=0, ) out1 = messages.TxOutputType( address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z", - amount=300000000 - 1940, + amount=300_000_000 - 1_940, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -167,29 +168,29 @@ def test_version_group_id_missing(client): ) -def test_spend_old_versions(client): +def test_spend_old_versions(client: Client): # inputs are NOT OWNED by this seed input_v1 = messages.TxInputType( address_n=parse_path("m/44h/1h/0h/0/0"), - amount=123000000, + amount=123_000_000, prev_hash=TXHASH_v1, prev_index=0, ) input_v2 = messages.TxInputType( address_n=parse_path("m/44h/1h/0h/0/1"), - amount=49990000, + amount=49_990_000, prev_hash=TXHASH_v2, prev_index=0, ) input_v3 = messages.TxInputType( address_n=parse_path("m/44h/1h/0h/0/2"), - amount=300000000, + amount=300_000_000, prev_hash=TXHASH_v3, prev_index=1, ) input_v4 = messages.TxInputType( address_n=parse_path("m/44h/1h/0h/0/3"), - amount=100000, + amount=100_000, prev_hash=TXHASH_v4, prev_index=0, ) @@ -225,11 +226,11 @@ def test_spend_old_versions(client): @pytest.mark.skip_t1 -def test_external_presigned(client): +def test_external_presigned(client: Client): inp1 = messages.TxInputType( # tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu address_n=parse_path("m/44h/1h/0h/0/0"), - amount=300000000, + amount=300_000_000, prev_hash=TXHASH_e38206, prev_index=0, ) @@ -237,7 +238,7 @@ def test_external_presigned(client): inp2 = messages.TxInputType( # tmQoJ3PTXgQLaRRZZYT6xk8XtjRbr2kCqwu # address_n=parse_path("m/44h/1h/0h/0/0"), - amount=300000000, + amount=300_000_000, prev_hash=TXHASH_aaf51e, prev_index=1, script_type=messages.InputScriptType.EXTERNAL, @@ -251,7 +252,7 @@ def test_external_presigned(client): out1 = messages.TxOutputType( address="tmJ1xYxP8XNTtCoDgvdmQPSrxh5qZJgy65Z", - amount=300000000 + 300000000 - 1940, + amount=300_000_000 + 300_000_000 - 1_940, script_type=messages.OutputScriptType.PAYTOADDRESS, ) diff --git a/tests/device_tests/cardano/test_address_public_key.py b/tests/device_tests/cardano/test_address_public_key.py index 890ef6f46..149c95951 100644 --- a/tests/device_tests/cardano/test_address_public_key.py +++ b/tests/device_tests/cardano/test_address_public_key.py @@ -22,6 +22,7 @@ from trezorlib.cardano import ( get_public_key, parse_optional_bytes, ) +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import CardanoAddressType, CardanoDerivationType from trezorlib.tools import parse_path @@ -45,7 +46,7 @@ pytestmark = [ "cardano/get_reward_address.json", "cardano/get_base_address.derivations.json", ) -def test_cardano_get_address(client, parameters, result): +def test_cardano_get_address(client: Client, parameters, result): client.init_device(new_session=True, derive_cardano=True) derivation_type = CardanoDerivationType.__members__[ @@ -88,7 +89,7 @@ def test_cardano_get_address(client, parameters, result): "cardano/get_public_key.slip39.json", "cardano/get_public_key.derivations.json", ) -def test_cardano_get_public_key(client, parameters, result): +def test_cardano_get_public_key(client: Client, parameters, result): client.init_device(new_session=True, derive_cardano=True) derivation_type = CardanoDerivationType.__members__[ diff --git a/tests/device_tests/cardano/test_derivations.py b/tests/device_tests/cardano/test_derivations.py index 95ddc98bd..923956ae9 100644 --- a/tests/device_tests/cardano/test_derivations.py +++ b/tests/device_tests/cardano/test_derivations.py @@ -17,6 +17,7 @@ import pytest from trezorlib.cardano import get_public_key +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import CardanoDerivationType as D from trezorlib.tools import parse_path @@ -29,10 +30,10 @@ pytestmark = [ pytest.mark.skip_t1, ] -ADDRESS_N = parse_path("m/1852'/1815'/0'") +ADDRESS_N = parse_path("m/1852h/1815h/0h") -def test_bad_session(client): +def test_bad_session(client: Client): client.init_device(new_session=True) with pytest.raises(TrezorFailure, match="not enabled"): get_public_key(client, ADDRESS_N, derivation_type=D.ICARUS) @@ -42,7 +43,7 @@ def test_bad_session(client): get_public_key(client, ADDRESS_N, derivation_type=D.ICARUS) -def test_ledger_available_always(client): +def test_ledger_available_always(client: Client): client.init_device(new_session=True, derive_cardano=False) get_public_key(client, ADDRESS_N, derivation_type=D.LEDGER) @@ -52,7 +53,7 @@ def test_ledger_available_always(client): @pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_BASIC_20_3of6) @pytest.mark.parametrize("derivation_type", D) # try ALL derivation types -def test_derivation_irrelevant_on_slip39(client, derivation_type): +def test_derivation_irrelevant_on_slip39(client: Client, derivation_type): client.init_device(new_session=True, derive_cardano=False) pubkey = get_public_key(client, ADDRESS_N, derivation_type=D.ICARUS) test_pubkey = get_public_key(client, ADDRESS_N, derivation_type=derivation_type) diff --git a/tests/device_tests/cardano/test_get_native_script_hash.py b/tests/device_tests/cardano/test_get_native_script_hash.py index 28c451f03..11edb8e6c 100644 --- a/tests/device_tests/cardano/test_get_native_script_hash.py +++ b/tests/device_tests/cardano/test_get_native_script_hash.py @@ -18,6 +18,7 @@ import pytest from trezorlib import messages from trezorlib.cardano import get_native_script_hash, parse_native_script +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import parametrize_using_common_fixtures @@ -31,7 +32,7 @@ pytestmark = [ @parametrize_using_common_fixtures( "cardano/get_native_script_hash.json", ) -def test_cardano_get_native_script_hash(client, parameters, result): +def test_cardano_get_native_script_hash(client: Client, parameters, result): client.init_device(new_session=True, derive_cardano=True) native_script_hash = get_native_script_hash( diff --git a/tests/device_tests/cardano/test_sign_tx.py b/tests/device_tests/cardano/test_sign_tx.py index 97e8e394d..c9a8f104e 100644 --- a/tests/device_tests/cardano/test_sign_tx.py +++ b/tests/device_tests/cardano/test_sign_tx.py @@ -17,6 +17,7 @@ import pytest from trezorlib import cardano, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from ...common import parametrize_using_common_fixtures @@ -34,7 +35,7 @@ pytestmark = [ "cardano/sign_tx.multisig.json", "cardano/sign_tx.slip39.json", ) -def test_cardano_sign_tx(client, parameters, result): +def test_cardano_sign_tx(client: Client, parameters, result): client.init_device(new_session=True, derive_cardano=True) signing_mode = messages.CardanoTxSigningMode.__members__[parameters["signing_mode"]] @@ -81,7 +82,7 @@ def test_cardano_sign_tx(client, parameters, result): "cardano/sign_tx.multisig.failed.json", "cardano/sign_tx_stake_pool_registration.failed.json", ) -def test_cardano_sign_tx_failed(client, parameters, result): +def test_cardano_sign_tx_failed(client: Client, parameters, result): client.init_device(new_session=True, derive_cardano=True) signing_mode = messages.CardanoTxSigningMode.__members__[parameters["signing_mode"]] diff --git a/tests/device_tests/eos/test_get_public_key.py b/tests/device_tests/eos/test_get_public_key.py index d83b877a7..97cc2d57e 100644 --- a/tests/device_tests/eos/test_get_public_key.py +++ b/tests/device_tests/eos/test_get_public_key.py @@ -16,6 +16,7 @@ import pytest +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.eos import get_public_key from trezorlib.tools import parse_path @@ -26,9 +27,9 @@ from ...common import MNEMONIC12 @pytest.mark.eos @pytest.mark.skip_t1 @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_eos_get_public_key(client): +def test_eos_get_public_key(client: Client): public_key = get_public_key( - client, parse_path("m/44'/194'/0'/0/0"), show_display=True + client, parse_path("m/44h/194h/0h/0/0"), show_display=True ) assert ( public_key.wif_public_key @@ -38,7 +39,7 @@ def test_eos_get_public_key(client): public_key.raw_public_key.hex() == "02015fabe197c955036bab25f4e7c16558f9f672f9f625314ab1ec8f64f7b1198e" ) - public_key = get_public_key(client, parse_path("m/44'/194'/0'/0/1")) + public_key = get_public_key(client, parse_path("m/44h/194h/0h/0/1")) assert ( public_key.wif_public_key == "EOS5d1VP15RKxT4dSakWu2TFuEgnmaGC2ckfSvQwND7pZC1tXkfLP" @@ -47,7 +48,7 @@ def test_eos_get_public_key(client): public_key.raw_public_key.hex() == "02608bc2c431521dee0b9d5f2fe34053e15fc3b20d2895e0abda857b9ed8e77a78" ) - public_key = get_public_key(client, parse_path("m/44'/194'/1'/0/0")) + public_key = get_public_key(client, parse_path("m/44h/194h/1h/0/0")) assert ( public_key.wif_public_key == "EOS7UuNeTf13nfcG85rDB7AHGugZi4C4wJ4ft12QRotqNfxdV2NvP" diff --git a/tests/device_tests/eos/test_signtx.py b/tests/device_tests/eos/test_signtx.py index cd326b841..e2b0355d3 100644 --- a/tests/device_tests/eos/test_signtx.py +++ b/tests/device_tests/eos/test_signtx.py @@ -17,13 +17,14 @@ import pytest from trezorlib import eos +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import EosSignedTx from trezorlib.tools import parse_path from ...common import MNEMONIC12 CHAIN_ID = "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f" -ADDRESS_N = parse_path("m/44'/194'/0'/0/0") +ADDRESS_N = parse_path("m/44h/194h/0h/0/0") pytestmark = [ pytest.mark.altcoin, @@ -33,7 +34,7 @@ pytestmark = [ ] -def test_eos_signtx_transfer_token(client): +def test_eos_signtx_transfer_token(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -67,7 +68,7 @@ def test_eos_signtx_transfer_token(client): ) -def test_eos_signtx_buyram(client): +def test_eos_signtx_buyram(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -100,7 +101,7 @@ def test_eos_signtx_buyram(client): ) -def test_eos_signtx_buyrambytes(client): +def test_eos_signtx_buyrambytes(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -133,7 +134,7 @@ def test_eos_signtx_buyrambytes(client): ) -def test_eos_signtx_sellram(client): +def test_eos_signtx_sellram(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -162,7 +163,7 @@ def test_eos_signtx_sellram(client): ) -def test_eos_signtx_delegate(client): +def test_eos_signtx_delegate(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -197,7 +198,7 @@ def test_eos_signtx_delegate(client): ) -def test_eos_signtx_undelegate(client): +def test_eos_signtx_undelegate(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -231,7 +232,7 @@ def test_eos_signtx_undelegate(client): ) -def test_eos_signtx_refund(client): +def test_eos_signtx_refund(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -260,7 +261,7 @@ def test_eos_signtx_refund(client): ) -def test_eos_signtx_linkauth(client): +def test_eos_signtx_linkauth(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -294,7 +295,7 @@ def test_eos_signtx_linkauth(client): ) -def test_eos_signtx_unlinkauth(client): +def test_eos_signtx_unlinkauth(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -327,7 +328,7 @@ def test_eos_signtx_unlinkauth(client): ) -def test_eos_signtx_updateauth(client): +def test_eos_signtx_updateauth(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -383,7 +384,7 @@ def test_eos_signtx_updateauth(client): ) -def test_eos_signtx_deleteauth(client): +def test_eos_signtx_deleteauth(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -412,7 +413,7 @@ def test_eos_signtx_deleteauth(client): ) -def test_eos_signtx_vote(client): +def test_eos_signtx_vote(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -475,7 +476,7 @@ def test_eos_signtx_vote(client): ) -def test_eos_signtx_vote_proxy(client): +def test_eos_signtx_vote_proxy(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -504,7 +505,7 @@ def test_eos_signtx_vote_proxy(client): ) -def test_eos_signtx_unknown(client): +def test_eos_signtx_unknown(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -533,7 +534,7 @@ def test_eos_signtx_unknown(client): ) -def test_eos_signtx_newaccount(client): +def test_eos_signtx_newaccount(client: Client): transaction = { "expiration": "2018-07-14T10:43:28", "ref_block_num": 6439, @@ -609,7 +610,7 @@ def test_eos_signtx_newaccount(client): ) -def test_eos_signtx_setcontract(client): +def test_eos_signtx_setcontract(client: Client): transaction = { "expiration": "2018-06-19T13:29:53", "ref_block_num": 30587, diff --git a/tests/device_tests/ethereum/test_getaddress.py b/tests/device_tests/ethereum/test_getaddress.py index 255af0b27..b9cd6d8c6 100644 --- a/tests/device_tests/ethereum/test_getaddress.py +++ b/tests/device_tests/ethereum/test_getaddress.py @@ -17,6 +17,7 @@ import pytest from trezorlib import ethereum +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import parametrize_using_common_fixtures @@ -25,6 +26,6 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] @parametrize_using_common_fixtures("ethereum/getaddress.json") -def test_getaddress(client, parameters, result): +def test_getaddress(client: Client, parameters, result): address_n = parse_path(parameters["path"]) assert ethereum.get_address(client, address_n) == result["address"] diff --git a/tests/device_tests/ethereum/test_getpublickey.py b/tests/device_tests/ethereum/test_getpublickey.py index 000ace9ab..c9d1f3ed5 100644 --- a/tests/device_tests/ethereum/test_getpublickey.py +++ b/tests/device_tests/ethereum/test_getpublickey.py @@ -17,6 +17,7 @@ import pytest from trezorlib import ethereum +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import parametrize_using_common_fixtures @@ -25,7 +26,7 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] @parametrize_using_common_fixtures("ethereum/getpublickey.json") -def test_ethereum_getpublickey(client, parameters, result): +def test_ethereum_getpublickey(client: Client, parameters, result): path = parse_path(parameters["path"]) res = ethereum.get_public_node(client, path) assert res.node.depth == len(path) diff --git a/tests/device_tests/ethereum/test_sign_typed_data.py b/tests/device_tests/ethereum/test_sign_typed_data.py index 47186cef4..a58e828c2 100644 --- a/tests/device_tests/ethereum/test_sign_typed_data.py +++ b/tests/device_tests/ethereum/test_sign_typed_data.py @@ -17,6 +17,7 @@ import pytest from trezorlib import ethereum, exceptions +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import parametrize_using_common_fixtures @@ -28,7 +29,7 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] @pytest.mark.skip_t1 @parametrize_using_common_fixtures("ethereum/sign_typed_data.json") -def test_ethereum_sign_typed_data(client, parameters, result): +def test_ethereum_sign_typed_data(client: Client, parameters, result): with client: address_n = parse_path(parameters["path"]) ret = ethereum.sign_typed_data( @@ -43,7 +44,7 @@ def test_ethereum_sign_typed_data(client, parameters, result): @pytest.mark.skip_t2 @parametrize_using_common_fixtures("ethereum/sign_typed_data.json") -def test_ethereum_sign_typed_data_blind(client, parameters, result): +def test_ethereum_sign_typed_data_blind(client: Client, parameters, result): with client: address_n = parse_path(parameters["path"]) ret = ethereum.sign_typed_data_hash( @@ -93,7 +94,7 @@ DATA = { } -def input_flow_show_more(client): +def input_flow_show_more(client: Client): """Clicks show_more button wherever possible""" yield # confirm domain client.debug.wait_layout() @@ -133,33 +134,33 @@ def input_flow_show_more(client): client.debug.press_yes() -def input_flow_cancel(client): +def input_flow_cancel(client: Client): """Clicks cancelling button""" yield # confirm domain client.debug.press_no() @pytest.mark.skip_t1 -def test_ethereum_sign_typed_data_show_more_button(client): +def test_ethereum_sign_typed_data_show_more_button(client: Client): with client: client.watch_layout() client.set_input_flow(input_flow_show_more(client)) ethereum.sign_typed_data( client, - parse_path("m/44'/60'/0'/0/0"), + parse_path("m/44h/60h/0h/0/0"), DATA, metamask_v4_compat=True, ) @pytest.mark.skip_t1 -def test_ethereum_sign_typed_data_cancel(client): +def test_ethereum_sign_typed_data_cancel(client: Client): with client, pytest.raises(exceptions.Cancelled): client.watch_layout() client.set_input_flow(input_flow_cancel(client)) ethereum.sign_typed_data( client, - parse_path("m/44'/60'/0'/0/0"), + parse_path("m/44h/60h/0h/0/0"), DATA, metamask_v4_compat=True, ) diff --git a/tests/device_tests/ethereum/test_sign_verify_message.py b/tests/device_tests/ethereum/test_sign_verify_message.py index 9463412df..8cf2680ad 100644 --- a/tests/device_tests/ethereum/test_sign_verify_message.py +++ b/tests/device_tests/ethereum/test_sign_verify_message.py @@ -17,6 +17,7 @@ import pytest from trezorlib import ethereum +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import parametrize_using_common_fixtures @@ -25,7 +26,7 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] @parametrize_using_common_fixtures("ethereum/signmessage.json") -def test_signmessage(client, parameters, result): +def test_signmessage(client: Client, parameters, result): res = ethereum.sign_message( client, parse_path(parameters["path"]), parameters["msg"] ) @@ -34,7 +35,7 @@ def test_signmessage(client, parameters, result): @parametrize_using_common_fixtures("ethereum/verifymessage.json") -def test_verify(client, parameters, result): +def test_verify(client: Client, parameters, result): res = ethereum.verify_message( client, parameters["address"], @@ -44,7 +45,7 @@ def test_verify(client, parameters, result): assert res is True -def test_verify_invalid(client): +def test_verify_invalid(client: Client): # First vector from the verifymessage JSON fixture msg = "This is an example of a signed message." address = "0xEa53AF85525B1779eE99ece1a5560C0b78537C3b" diff --git a/tests/device_tests/ethereum/test_signtx.py b/tests/device_tests/ethereum/test_signtx.py index 39ffccab5..bd4194930 100644 --- a/tests/device_tests/ethereum/test_signtx.py +++ b/tests/device_tests/ethereum/test_signtx.py @@ -17,7 +17,7 @@ import pytest from trezorlib import ethereum, exceptions, messages -from trezorlib.debuglink import message_filters +from trezorlib.debuglink import TrezorClientDebugLink as Client, message_filters from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -34,7 +34,7 @@ pytestmark = [pytest.mark.altcoin, pytest.mark.ethereum] "ethereum/sign_tx.json", "ethereum/sign_tx_eip155.json", ) -def test_signtx(client, parameters, result): +def test_signtx(client: Client, parameters, result): with client: sig_v, sig_r, sig_s = ethereum.sign_tx( client, @@ -57,7 +57,7 @@ def test_signtx(client, parameters, result): @parametrize_using_common_fixtures("ethereum/sign_tx_eip1559.json") -def test_signtx_eip1559(client, parameters, result): +def test_signtx_eip1559(client: Client, parameters, result): with client: sig_v, sig_r, sig_s = ethereum.sign_tx_eip1559( client, @@ -77,7 +77,7 @@ def test_signtx_eip1559(client, parameters, result): assert sig_v == result["sig_v"] -def test_sanity_checks(client): +def test_sanity_checks(client: Client): """Is not vectorized because these are internal-only tests that do not need to be exposed to the public. """ @@ -85,12 +85,12 @@ def test_sanity_checks(client): with pytest.raises(TrezorFailure, match=r"DataError"): ethereum.sign_tx( client, - n=parse_path("44'/60'/0'/0/0"), - nonce=123456, - gas_price=20000, - gas_limit=20000, + n=parse_path("m/44h/60h/0h/0/0"), + nonce=123_456, + gas_price=20_000, + gas_limit=20_000, to="", - value=12345678901234567890, + value=12_345_678_901_234_567_890, chain_id=1, ) @@ -98,12 +98,12 @@ def test_sanity_checks(client): with pytest.raises(TrezorFailure, match=r"DataError"): ethereum.sign_tx( client, - n=parse_path("44'/60'/0'/0/0"), - nonce=123456, + n=parse_path("m/44h/60h/0h/0/0"), + nonce=123_456, gas_price=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, gas_limit=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, to=TO_ADDR, - value=12345678901234567890, + value=12_345_678_901_234_567_890, chain_id=1, ) @@ -111,17 +111,17 @@ def test_sanity_checks(client): with pytest.raises(TrezorFailure, match=r"Chain ID out of bounds"): ethereum.sign_tx( client, - n=parse_path("44'/60'/0'/0/0"), - nonce=123456, - gas_price=20000, - gas_limit=20000, + n=parse_path("m/44h/60h/0h/0/0"), + nonce=123_456, + gas_price=20_000, + gas_limit=20_000, to=TO_ADDR, - value=12345678901234567890, + value=12_345_678_901_234_567_890, chain_id=0, ) -def test_data_streaming(client): +def test_data_streaming(client: Client): """Only verifying the expected responses, the signatures are checked in vectorized function above. """ @@ -132,19 +132,19 @@ def test_data_streaming(client): messages.ButtonRequest(code=messages.ButtonRequestType.SignTx), messages.ButtonRequest(code=messages.ButtonRequestType.SignTx), message_filters.EthereumTxRequest( - data_length=1024, + data_length=1_024, signature_r=None, signature_s=None, signature_v=None, ), message_filters.EthereumTxRequest( - data_length=1024, + data_length=1_024, signature_r=None, signature_s=None, signature_v=None, ), message_filters.EthereumTxRequest( - data_length=1024, + data_length=1_024, signature_r=None, signature_s=None, signature_v=None, @@ -161,10 +161,10 @@ def test_data_streaming(client): ethereum.sign_tx( client, - n=parse_path("44'/60'/0'/0/0"), + n=parse_path("m/44h/60h/0h/0/0"), nonce=0, - gas_price=20000, - gas_limit=20000, + gas_price=20_000, + gas_limit=20_000, to=TO_ADDR, value=0, data=b"ABCDEFGHIJKLMNOP" * 256 + b"!!!", @@ -172,12 +172,12 @@ def test_data_streaming(client): ) -def test_signtx_eip1559_access_list(client): +def test_signtx_eip1559_access_list(client: Client): with client: sig_v, sig_r, sig_s = ethereum.sign_tx_eip1559( client, - n=parse_path("44'/60'/0'/0/100"), + n=parse_path("m/44h/60h/0h/0/100"), nonce=0, gas_limit=20, to="0x1d1c328764a41bda0492b66baa30c4a339ff85ef", @@ -211,12 +211,12 @@ def test_signtx_eip1559_access_list(client): ) -def test_signtx_eip1559_access_list_larger(client): +def test_signtx_eip1559_access_list_larger(client: Client): with client: sig_v, sig_r, sig_s = ethereum.sign_tx_eip1559( client, - n=parse_path("44'/60'/0'/0/100"), + n=parse_path("m/44h/60h/0h/0/100"), nonce=0, gas_limit=20, to="0x1d1c328764a41bda0492b66baa30c4a339ff85ef", @@ -264,7 +264,7 @@ def test_signtx_eip1559_access_list_larger(client): ) -def test_sanity_checks_eip1559(client): +def test_sanity_checks_eip1559(client: Client): """Is not vectorized because these are internal-only tests that do not need to be exposed to the public. """ @@ -272,7 +272,7 @@ def test_sanity_checks_eip1559(client): with pytest.raises(TrezorFailure, match=r"DataError"): ethereum.sign_tx_eip1559( client, - n=parse_path("44'/60'/0'/0/100"), + n=parse_path("m/44h/60h/0h/0/100"), nonce=0, gas_limit=20, to="", @@ -286,7 +286,7 @@ def test_sanity_checks_eip1559(client): with pytest.raises(TrezorFailure, match=r"DataError"): ethereum.sign_tx_eip1559( client, - n=parse_path("44'/60'/0'/0/100"), + n=parse_path("m/44h/60h/0h/0/100"), nonce=0, gas_limit=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, to=TO_ADDR, @@ -300,7 +300,7 @@ def test_sanity_checks_eip1559(client): with pytest.raises(TrezorFailure, match=r"DataError"): ethereum.sign_tx_eip1559( client, - n=parse_path("44'/60'/0'/0/100"), + n=parse_path("m/44h/60h/0h/0/100"), nonce=0, gas_limit=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, to=TO_ADDR, @@ -314,7 +314,7 @@ def test_sanity_checks_eip1559(client): with pytest.raises(TrezorFailure, match=r"Chain ID out of bounds"): ethereum.sign_tx_eip1559( client, - n=parse_path("44'/60'/0'/0/100"), + n=parse_path("m/44h/60h/0h/0/100"), nonce=0, gas_limit=20, to=TO_ADDR, @@ -325,7 +325,7 @@ def test_sanity_checks_eip1559(client): ) -def input_flow_skip(client, cancel=False): +def input_flow_skip(client: Client, cancel=False): yield # confirm sending client.debug.press_yes() @@ -338,7 +338,7 @@ def input_flow_skip(client, cancel=False): client.debug.press_yes() -def input_flow_scroll_down(client, cancel=False): +def input_flow_scroll_down(client: Client, cancel=False): yield # confirm sending client.debug.wait_layout() client.debug.press_yes() @@ -363,7 +363,7 @@ def input_flow_scroll_down(client, cancel=False): client.debug.press_yes() -def input_flow_go_back(client, cancel=False): +def input_flow_go_back(client: Client, cancel=False): br = yield # confirm sending client.debug.wait_layout() client.debug.press_yes() @@ -399,13 +399,13 @@ HEXDATA = "0123456789abcd000023456789abcd010003456789abcd020000456789abcd0300000 "flow", (input_flow_skip, input_flow_scroll_down, input_flow_go_back) ) @pytest.mark.skip_t1 -def test_signtx_data_pagination(client, flow): +def test_signtx_data_pagination(client: Client, flow): with client: client.watch_layout() client.set_input_flow(flow(client)) ethereum.sign_tx( client, - n=parse_path("m/44'/60'/0'/0/0"), + n=parse_path("m/44h/60h/0h/0/0"), nonce=0x0, gas_price=0x14, gas_limit=0x14, @@ -421,7 +421,7 @@ def test_signtx_data_pagination(client, flow): client.set_input_flow(flow(client, cancel=True)) ethereum.sign_tx( client, - n=parse_path("m/44'/60'/0'/0/0"), + n=parse_path("m/44h/60h/0h/0/0"), nonce=0x0, gas_price=0x14, gas_limit=0x14, diff --git a/tests/device_tests/misc/test_cosi.py b/tests/device_tests/misc/test_cosi.py index b30dd06bd..048552e2b 100644 --- a/tests/device_tests/misc/test_cosi.py +++ b/tests/device_tests/misc/test_cosi.py @@ -19,17 +19,18 @@ from hashlib import sha256 import pytest from trezorlib import cosi +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path pytestmark = pytest.mark.skip_t2 -def test_cosi_commit(client): +def test_cosi_commit(client: Client): digest = sha256(b"this is a message").digest() - c0 = cosi.commit(client, parse_path("10018'/0'"), digest) - c1 = cosi.commit(client, parse_path("10018'/1'"), digest) - c2 = cosi.commit(client, parse_path("10018'/2'"), digest) + c0 = cosi.commit(client, parse_path("m/10018h/0h"), digest) + c1 = cosi.commit(client, parse_path("m/10018h/1h"), digest) + c2 = cosi.commit(client, parse_path("m/10018h/2h"), digest) assert c0.pubkey != c1.pubkey assert c0.pubkey != c2.pubkey @@ -41,9 +42,9 @@ def test_cosi_commit(client): digestb = sha256(b"this is a different message").digest() - c0b = cosi.commit(client, parse_path("10018'/0'"), digestb) - c1b = cosi.commit(client, parse_path("10018'/1'"), digestb) - c2b = cosi.commit(client, parse_path("10018'/2'"), digestb) + c0b = cosi.commit(client, parse_path("m/10018h/0h"), digestb) + c1b = cosi.commit(client, parse_path("m/10018h/1h"), digestb) + c2b = cosi.commit(client, parse_path("m/10018h/2h"), digestb) assert c0.pubkey == c0b.pubkey assert c1.pubkey == c1b.pubkey @@ -54,20 +55,20 @@ def test_cosi_commit(client): assert c2.commitment != c2b.commitment -def test_cosi_sign(client): +def test_cosi_sign(client: Client): digest = sha256(b"this is a message").digest() - c0 = cosi.commit(client, parse_path("10018'/0'"), digest) - c1 = cosi.commit(client, parse_path("10018'/1'"), digest) - c2 = cosi.commit(client, parse_path("10018'/2'"), digest) + c0 = cosi.commit(client, parse_path("m/10018h/0h"), digest) + c1 = cosi.commit(client, parse_path("m/10018h/1h"), digest) + c2 = cosi.commit(client, parse_path("m/10018h/2h"), digest) global_pk = cosi.combine_keys([c0.pubkey, c1.pubkey, c2.pubkey]) global_R = cosi.combine_keys([c0.commitment, c1.commitment, c2.commitment]) # fmt: off - sig0 = cosi.sign(client, parse_path("10018'/0'"), digest, global_R, global_pk) - sig1 = cosi.sign(client, parse_path("10018'/1'"), digest, global_R, global_pk) - sig2 = cosi.sign(client, parse_path("10018'/2'"), digest, global_R, global_pk) + sig0 = cosi.sign(client, parse_path("m/10018h/0h"), digest, global_R, global_pk) + sig1 = cosi.sign(client, parse_path("m/10018h/1h"), digest, global_R, global_pk) + sig2 = cosi.sign(client, parse_path("m/10018h/2h"), digest, global_R, global_pk) # fmt: on sig = cosi.combine_sig(global_R, [sig0.signature, sig1.signature, sig2.signature]) @@ -75,9 +76,9 @@ def test_cosi_sign(client): cosi.verify_combined(sig, digest, global_pk) -def test_cosi_compat(client): +def test_cosi_compat(client: Client): digest = sha256(b"this is not a pipe").digest() - remote_commit = cosi.commit(client, parse_path("10018'/0'"), digest) + remote_commit = cosi.commit(client, parse_path("m/10018h/0h"), digest) local_privkey = sha256(b"private key").digest()[:32] local_pubkey = cosi.pubkey_from_privkey(local_privkey) @@ -86,7 +87,9 @@ def test_cosi_compat(client): global_pk = cosi.combine_keys([remote_commit.pubkey, local_pubkey]) global_R = cosi.combine_keys([remote_commit.commitment, local_commitment]) - remote_sig = cosi.sign(client, parse_path("10018'/0'"), digest, global_R, global_pk) + remote_sig = cosi.sign( + client, parse_path("m/10018h/0h"), digest, global_R, global_pk + ) local_sig = cosi.sign_with_privkey( digest, local_privkey, global_pk, local_nonce, global_R ) diff --git a/tests/device_tests/misc/test_msg_cipherkeyvalue.py b/tests/device_tests/misc/test_msg_cipherkeyvalue.py index e267c48c3..7a9fe6642 100644 --- a/tests/device_tests/misc/test_msg_cipherkeyvalue.py +++ b/tests/device_tests/misc/test_msg_cipherkeyvalue.py @@ -17,12 +17,13 @@ import pytest from trezorlib import misc +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import MNEMONIC12 @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_encrypt(client): +def test_encrypt(client: Client): res = misc.encrypt_keyvalue( client, [0, 1, 2], @@ -100,7 +101,7 @@ def test_encrypt(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_decrypt(client): +def test_decrypt(client: Client): res = misc.decrypt_keyvalue( client, [0, 1, 2], @@ -177,11 +178,11 @@ def test_decrypt(client): assert res == b"testing message!" -def test_encrypt_badlen(client): +def test_encrypt_badlen(client: Client): with pytest.raises(Exception): misc.encrypt_keyvalue(client, [0, 1, 2], "test", b"testing") -def test_decrypt_badlen(client): +def test_decrypt_badlen(client: Client): with pytest.raises(Exception): misc.decrypt_keyvalue(client, [0, 1, 2], "test", b"testing") diff --git a/tests/device_tests/misc/test_msg_getecdhsessionkey.py b/tests/device_tests/misc/test_msg_getecdhsessionkey.py index ae07f27f5..f09ff530c 100644 --- a/tests/device_tests/misc/test_msg_getecdhsessionkey.py +++ b/tests/device_tests/misc/test_msg_getecdhsessionkey.py @@ -17,12 +17,13 @@ import pytest from trezorlib import messages, misc +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import MNEMONIC12 @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_ecdh(client): +def test_ecdh(client: Client): identity = messages.IdentityType( proto="gpg", user="", diff --git a/tests/device_tests/misc/test_msg_getentropy.py b/tests/device_tests/misc/test_msg_getentropy.py index 858ca1971..9dbdcfda7 100644 --- a/tests/device_tests/misc/test_msg_getentropy.py +++ b/tests/device_tests/misc/test_msg_getentropy.py @@ -19,6 +19,7 @@ import math import pytest from trezorlib import messages as m, misc +from trezorlib.debuglink import TrezorClientDebugLink as Client ENTROPY_LENGTHS_POW2 = [2 ** l for l in range(10)] ENTROPY_LENGTHS_POW2_1 = [2 ** l + 1 for l in range(10)] @@ -38,7 +39,7 @@ def entropy(data): @pytest.mark.parametrize("entropy_length", ENTROPY_LENGTHS) -def test_entropy(client, entropy_length): +def test_entropy(client: Client, entropy_length): with client: client.set_expected_responses( [m.ButtonRequest(code=m.ButtonRequestType.ProtectCall), m.Entropy] diff --git a/tests/device_tests/misc/test_msg_signidentity.py b/tests/device_tests/misc/test_msg_signidentity.py index 584b08aa4..bc9e7f5bd 100644 --- a/tests/device_tests/misc/test_msg_signidentity.py +++ b/tests/device_tests/misc/test_msg_signidentity.py @@ -17,12 +17,13 @@ import pytest from trezorlib import messages, misc +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import MNEMONIC12 @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_sign(client): +def test_sign(client: Client): hidden = bytes.fromhex( "cd8552569d6e4509266ef137584d1e62c7579b5b8ed69bbafa4b864c6521e7c2" ) diff --git a/tests/device_tests/monero/test_getaddress.py b/tests/device_tests/monero/test_getaddress.py index ab79f4b2f..37cee4aa4 100644 --- a/tests/device_tests/monero/test_getaddress.py +++ b/tests/device_tests/monero/test_getaddress.py @@ -17,6 +17,7 @@ import pytest from trezorlib import monero +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import MNEMONIC12 @@ -26,7 +27,7 @@ from ...common import MNEMONIC12 @pytest.mark.monero @pytest.mark.skip_t1 @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_monero_getaddress(client): +def test_monero_getaddress(client: Client): assert ( monero.get_address(client, parse_path("m/44h/128h/0h"), show_display=True) == b"4Ahp23WfMrMFK3wYL2hLWQFGt87ZTeRkufS6JoQZu6MEFDokAQeGWmu9MA3GFq1yVLSJQbKJqVAn9F9DLYGpRzRAEXqAXKM" diff --git a/tests/device_tests/monero/test_getwatchkey.py b/tests/device_tests/monero/test_getwatchkey.py index 6d2899233..8b183cc8c 100644 --- a/tests/device_tests/monero/test_getwatchkey.py +++ b/tests/device_tests/monero/test_getwatchkey.py @@ -17,6 +17,7 @@ import pytest from trezorlib import monero +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import MNEMONIC12 @@ -26,7 +27,7 @@ from ...common import MNEMONIC12 @pytest.mark.monero @pytest.mark.skip_t1 @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_monero_getwatchkey(client): +def test_monero_getwatchkey(client: Client): res = monero.get_watch_key(client, parse_path("m/44h/128h/0h")) assert ( res.address diff --git a/tests/device_tests/nem/test_getaddress.py b/tests/device_tests/nem/test_getaddress.py index 7cde0eea9..7e72e716a 100644 --- a/tests/device_tests/nem/test_getaddress.py +++ b/tests/device_tests/nem/test_getaddress.py @@ -17,6 +17,7 @@ import pytest from trezorlib import nem +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import MNEMONIC12 @@ -25,16 +26,16 @@ from ...common import MNEMONIC12 @pytest.mark.altcoin @pytest.mark.nem @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_nem_getaddress(client): +def test_nem_getaddress(client: Client): assert ( nem.get_address( - client, parse_path("m/44'/1'/0'/0'/0'"), 0x68, show_display=True + client, parse_path("m/44h/1h/0h/0h/0h"), 0x68, show_display=True ) == "NB3JCHVARQNGDS3UVGAJPTFE22UQFGMCQGHUBWQN" ) assert ( nem.get_address( - client, parse_path("m/44'/1'/0'/0'/0'"), 0x98, show_display=True + client, parse_path("m/44h/1h/0h/0h/0h"), 0x98, show_display=True ) == "TB3JCHVARQNGDS3UVGAJPTFE22UQFGMCQHSBNBMF" ) diff --git a/tests/device_tests/nem/test_signtx_mosaics.py b/tests/device_tests/nem/test_signtx_mosaics.py index 37addf5b1..ad6377f26 100644 --- a/tests/device_tests/nem/test_signtx_mosaics.py +++ b/tests/device_tests/nem/test_signtx_mosaics.py @@ -17,11 +17,12 @@ import pytest from trezorlib import nem +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import MNEMONIC12 -ADDRESS_N = parse_path("m/44'/1'/0'/0'/0'") +ADDRESS_N = parse_path("m/44h/1h/0h/0h/0h") pytestmark = [ pytest.mark.altcoin, @@ -30,7 +31,7 @@ pytestmark = [ ] -def test_nem_signtx_mosaic_supply_change(client): +def test_nem_signtx_mosaic_supply_change(client: Client): tx = nem.sign_tx( client, ADDRESS_N, @@ -59,7 +60,7 @@ def test_nem_signtx_mosaic_supply_change(client): ) -def test_nem_signtx_mosaic_creation(client): +def test_nem_signtx_mosaic_creation(client: Client): tx = nem.sign_tx( client, ADDRESS_N, @@ -91,7 +92,7 @@ def test_nem_signtx_mosaic_creation(client): ) -def test_nem_signtx_mosaic_creation_properties(client): +def test_nem_signtx_mosaic_creation_properties(client: Client): tx = nem.sign_tx( client, ADDRESS_N, @@ -128,7 +129,7 @@ def test_nem_signtx_mosaic_creation_properties(client): ) -def test_nem_signtx_mosaic_creation_levy(client): +def test_nem_signtx_mosaic_creation_levy(client: Client): tx = nem.sign_tx( client, ADDRESS_N, diff --git a/tests/device_tests/nem/test_signtx_multisig.py b/tests/device_tests/nem/test_signtx_multisig.py index 67e3ea179..a438d09b7 100644 --- a/tests/device_tests/nem/test_signtx_multisig.py +++ b/tests/device_tests/nem/test_signtx_multisig.py @@ -17,6 +17,7 @@ import pytest from trezorlib import nem +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import MNEMONIC12 @@ -29,10 +30,10 @@ pytestmark = [ # assertion data from T1 -def test_nem_signtx_aggregate_modification(client): +def test_nem_signtx_aggregate_modification(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 74649215, "fee": 2000000, @@ -59,10 +60,10 @@ def test_nem_signtx_aggregate_modification(client): ) -def test_nem_signtx_multisig(client): +def test_nem_signtx_multisig(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 1, "fee": 10000, @@ -97,7 +98,7 @@ def test_nem_signtx_multisig(client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 74649215, "fee": 150, @@ -130,10 +131,10 @@ def test_nem_signtx_multisig(client): ) -def test_nem_signtx_multisig_signer(client): +def test_nem_signtx_multisig_signer(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 333, "fee": 200, @@ -168,7 +169,7 @@ def test_nem_signtx_multisig_signer(client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 900000, "fee": 200000, diff --git a/tests/device_tests/nem/test_signtx_others.py b/tests/device_tests/nem/test_signtx_others.py index dd4b38a9d..e9ca78880 100644 --- a/tests/device_tests/nem/test_signtx_others.py +++ b/tests/device_tests/nem/test_signtx_others.py @@ -17,6 +17,7 @@ import pytest from trezorlib import nem +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import MNEMONIC12 @@ -29,11 +30,11 @@ pytestmark = [ # assertion data from T1 -def test_nem_signtx_importance_transfer(client): +def test_nem_signtx_importance_transfer(client: Client): with client: tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 12349215, "fee": 9900, @@ -58,10 +59,10 @@ def test_nem_signtx_importance_transfer(client): ) -def test_nem_signtx_provision_namespace(client): +def test_nem_signtx_provision_namespace(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 74649215, "fee": 2000000, diff --git a/tests/device_tests/nem/test_signtx_transfers.py b/tests/device_tests/nem/test_signtx_transfers.py index dcb820c4d..7a0bd6374 100644 --- a/tests/device_tests/nem/test_signtx_transfers.py +++ b/tests/device_tests/nem/test_signtx_transfers.py @@ -17,6 +17,7 @@ import pytest from trezorlib import messages, nem +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import MNEMONIC12 @@ -29,7 +30,7 @@ pytestmark = [ # assertion data from T1 -def test_nem_signtx_simple(client): +def test_nem_signtx_simple(client: Client): with client: client.set_expected_responses( [ @@ -45,7 +46,7 @@ def test_nem_signtx_simple(client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 74649215, "amount": 2000000, @@ -72,7 +73,7 @@ def test_nem_signtx_simple(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_nem_signtx_encrypted_payload(client): +def test_nem_signtx_encrypted_payload(client: Client): with client: client.set_expected_responses( [ @@ -88,7 +89,7 @@ def test_nem_signtx_encrypted_payload(client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 74649215, "amount": 2000000, @@ -118,10 +119,10 @@ def test_nem_signtx_encrypted_payload(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_nem_signtx_xem_as_mosaic(client): +def test_nem_signtx_xem_as_mosaic(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 76809215, "amount": 5000000, @@ -152,10 +153,10 @@ def test_nem_signtx_xem_as_mosaic(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_nem_signtx_unknown_mosaic(client): +def test_nem_signtx_unknown_mosaic(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 76809215, "amount": 2000000, @@ -186,10 +187,10 @@ def test_nem_signtx_unknown_mosaic(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_nem_signtx_known_mosaic(client): +def test_nem_signtx_known_mosaic(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 76809215, "amount": 3000000, @@ -220,10 +221,10 @@ def test_nem_signtx_known_mosaic(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_nem_signtx_known_mosaic_with_levy(client): +def test_nem_signtx_known_mosaic_with_levy(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 76809215, "amount": 2000000, @@ -254,10 +255,10 @@ def test_nem_signtx_known_mosaic_with_levy(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_nem_signtx_multiple_mosaics(client): +def test_nem_signtx_multiple_mosaics(client: Client): tx = nem.sign_tx( client, - parse_path("m/44'/1'/0'/0'/0'"), + parse_path("m/44h/1h/0h/0h/0h"), { "timeStamp": 76809215, "amount": 2000000, diff --git a/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py b/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py index 80e96dfba..7d990c78b 100644 --- a/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py +++ b/tests/device_tests/reset_recovery/test_recovery_bip39_dryrun.py @@ -17,12 +17,13 @@ import pytest from trezorlib import device, exceptions, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ... import buttons from ...common import MNEMONIC12 -def do_recover_legacy(client, mnemonic, **kwargs): +def do_recover_legacy(client: Client, mnemonic, **kwargs): def input_callback(_): word, pos = client.debug.read_recovery_word() if pos != 0: @@ -45,7 +46,7 @@ def do_recover_legacy(client, mnemonic, **kwargs): return ret -def do_recover_core(client, mnemonic, **kwargs): +def do_recover_core(client: Client, mnemonic, **kwargs): def input_flow(): yield layout = client.debug.wait_layout() @@ -86,7 +87,7 @@ def do_recover_core(client, mnemonic, **kwargs): return device.recover(client, dry_run=True, **kwargs) -def do_recover(client, mnemonic): +def do_recover(client: Client, mnemonic): if client.features.model == "1": return do_recover_legacy(client, mnemonic) else: @@ -94,13 +95,13 @@ def do_recover(client, mnemonic): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_dry_run(client): +def test_dry_run(client: Client): ret = do_recover(client, MNEMONIC12.split(" ")) assert isinstance(ret, messages.Success) @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_seed_mismatch(client): +def test_seed_mismatch(client: Client): with pytest.raises( exceptions.TrezorFailure, match="does not match the one in the device" ): @@ -108,13 +109,13 @@ def test_seed_mismatch(client): @pytest.mark.skip_t2 -def test_invalid_seed_t1(client): +def test_invalid_seed_t1(client: Client): with pytest.raises(exceptions.TrezorFailure, match="Invalid seed"): do_recover(client, ["stick"] * 12) @pytest.mark.skip_t1 -def test_invalid_seed_core(client): +def test_invalid_seed_core(client: Client): def input_flow(): yield layout = client.debug.wait_layout() @@ -168,7 +169,7 @@ def test_invalid_seed_core(client): @pytest.mark.setup_client(uninitialized=True) -def test_uninitialized(client): +def test_uninitialized(client: Client): with pytest.raises(exceptions.TrezorFailure, match="not initialized"): do_recover(client, ["all"] * 12) @@ -197,7 +198,7 @@ def _make_bad_params(): @pytest.mark.parametrize("field_name, field_value", _make_bad_params()) -def test_bad_parameters(client, field_name, field_value): +def test_bad_parameters(client: Client, field_name, field_value): msg = messages.RecoveryDevice( dry_run=True, word_count=12, diff --git a/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py b/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py index 5912edd57..1798bba39 100644 --- a/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py +++ b/tests/device_tests/reset_recovery/test_recovery_bip39_t1.py @@ -17,6 +17,7 @@ import pytest from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import MNEMONIC12 @@ -27,7 +28,7 @@ pytestmark = pytest.mark.skip_t2 @pytest.mark.setup_client(uninitialized=True) -def test_pin_passphrase(client): +def test_pin_passphrase(client: Client): mnemonic = MNEMONIC12.split(" ") ret = client.call_raw( messages.RecoveryDevice( @@ -89,7 +90,7 @@ def test_pin_passphrase(client): @pytest.mark.setup_client(uninitialized=True) -def test_nopin_nopassphrase(client): +def test_nopin_nopassphrase(client: Client): mnemonic = MNEMONIC12.split(" ") ret = client.call_raw( messages.RecoveryDevice( @@ -139,7 +140,7 @@ def test_nopin_nopassphrase(client): @pytest.mark.setup_client(uninitialized=True) -def test_word_fail(client): +def test_word_fail(client: Client): ret = client.call_raw( messages.RecoveryDevice( word_count=12, @@ -168,7 +169,7 @@ def test_word_fail(client): @pytest.mark.setup_client(uninitialized=True) -def test_pin_fail(client): +def test_pin_fail(client: Client): ret = client.call_raw( messages.RecoveryDevice( word_count=12, @@ -200,7 +201,7 @@ def test_pin_fail(client): assert isinstance(ret, messages.Failure) -def test_already_initialized(client): +def test_already_initialized(client: Client): with pytest.raises(RuntimeError): device.recover( client, 12, False, False, "label", "en-US", client.mnemonic_callback diff --git a/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py b/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py index c2f27bbf1..609b94a61 100644 --- a/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py +++ b/tests/device_tests/reset_recovery/test_recovery_bip39_t2.py @@ -17,6 +17,7 @@ import pytest from trezorlib import device, exceptions, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import MNEMONIC12 @@ -24,7 +25,7 @@ pytestmark = pytest.mark.skip_t1 @pytest.mark.setup_client(uninitialized=True) -def test_tt_pin_passphrase(client): +def test_tt_pin_passphrase(client: Client): layout = client.debug.wait_layout mnemonic = MNEMONIC12.split(" ") @@ -78,7 +79,7 @@ def test_tt_pin_passphrase(client): @pytest.mark.setup_client(uninitialized=True) -def test_tt_nopin_nopassphrase(client): +def test_tt_nopin_nopassphrase(client: Client): layout = client.debug.wait_layout mnemonic = MNEMONIC12.split(" ") @@ -122,7 +123,7 @@ def test_tt_nopin_nopassphrase(client): assert client.features.label == "hello" -def test_already_initialized(client): +def test_already_initialized(client: Client): with pytest.raises(RuntimeError): device.recover(client) diff --git a/tests/device_tests/reset_recovery/test_recovery_slip39_advanced.py b/tests/device_tests/reset_recovery/test_recovery_slip39_advanced.py index 6d21494a4..4fee4e2e2 100644 --- a/tests/device_tests/reset_recovery/test_recovery_slip39_advanced.py +++ b/tests/device_tests/reset_recovery/test_recovery_slip39_advanced.py @@ -17,6 +17,7 @@ import pytest from trezorlib import device, exceptions, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import ( MNEMONIC_SLIP39_ADVANCED_20, @@ -41,7 +42,7 @@ VECTORS = ( # To allow reusing functionality for multiple tests -def _test_secret(client, shares, secret, click_info=False): +def _test_secret(client: Client, shares, secret, click_info=False): debug = client.debug def input_flow(): @@ -69,18 +70,18 @@ def _test_secret(client, shares, secret, click_info=False): @pytest.mark.parametrize("shares, secret", VECTORS) @pytest.mark.setup_client(uninitialized=True) -def test_secret(client, shares, secret): +def test_secret(client: Client, shares, secret): _test_secret(client, shares, secret) @pytest.mark.parametrize("shares, secret", VECTORS) @pytest.mark.setup_client(uninitialized=True) -def test_secret_click_info_button(client, shares, secret): +def test_secret_click_info_button(client: Client, shares, secret): _test_secret(client, shares, secret, click_info=True) @pytest.mark.setup_client(uninitialized=True) -def test_extra_share_entered(client): +def test_extra_share_entered(client: Client): _test_secret( client, shares=EXTRA_GROUP_SHARE + MNEMONIC_SLIP39_ADVANCED_20, @@ -89,7 +90,7 @@ def test_extra_share_entered(client): @pytest.mark.setup_client(uninitialized=True) -def test_abort(client): +def test_abort(client: Client): debug = client.debug def input_flow(): @@ -109,7 +110,7 @@ def test_abort(client): @pytest.mark.setup_client(uninitialized=True) -def test_noabort(client): +def test_noabort(client: Client): debug = client.debug def input_flow(): @@ -131,7 +132,7 @@ def test_noabort(client): @pytest.mark.setup_client(uninitialized=True) -def test_same_share(client): +def test_same_share(client: Client): debug = client.debug # we choose the second share from the fixture because # the 1st is 1of1 and group threshold condition is reached first @@ -172,7 +173,7 @@ def test_same_share(client): @pytest.mark.setup_client(uninitialized=True) -def test_group_threshold_reached(client): +def test_group_threshold_reached(client: Client): debug = client.debug # first share in the fixture is 1of1 so we choose that first_share = MNEMONIC_SLIP39_ADVANCED_20[0].split(" ") diff --git a/tests/device_tests/reset_recovery/test_recovery_slip39_advanced_dryrun.py b/tests/device_tests/reset_recovery/test_recovery_slip39_advanced_dryrun.py index a19250d9d..38edd7994 100644 --- a/tests/device_tests/reset_recovery/test_recovery_slip39_advanced_dryrun.py +++ b/tests/device_tests/reset_recovery/test_recovery_slip39_advanced_dryrun.py @@ -17,6 +17,7 @@ import pytest from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from ...common import MNEMONIC_SLIP39_ADVANCED_20, recovery_enter_shares @@ -37,7 +38,7 @@ EXTRA_GROUP_SHARE = [ @pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_ADVANCED_20, passphrase=False) -def test_2of3_dryrun(client): +def test_2of3_dryrun(client: Client): debug = client.debug def input_flow(): @@ -66,7 +67,7 @@ def test_2of3_dryrun(client): @pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_ADVANCED_20) -def test_2of3_invalid_seed_dryrun(client): +def test_2of3_invalid_seed_dryrun(client: Client): debug = client.debug def input_flow(): diff --git a/tests/device_tests/reset_recovery/test_recovery_slip39_basic.py b/tests/device_tests/reset_recovery/test_recovery_slip39_basic.py index 8468e892c..1768d0f1c 100644 --- a/tests/device_tests/reset_recovery/test_recovery_slip39_basic.py +++ b/tests/device_tests/reset_recovery/test_recovery_slip39_basic.py @@ -17,6 +17,7 @@ import pytest from trezorlib import device, exceptions, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import ( MNEMONIC_SLIP39_BASIC_20_3of6, @@ -47,7 +48,7 @@ VECTORS = ( @pytest.mark.setup_client(uninitialized=True) @pytest.mark.parametrize("shares, secret", VECTORS) -def test_secret(client, shares, secret): +def test_secret(client: Client, shares, secret): debug = client.debug def input_flow(): @@ -71,7 +72,7 @@ def test_secret(client, shares, secret): @pytest.mark.setup_client(uninitialized=True) -def test_recover_with_pin_passphrase(client): +def test_recover_with_pin_passphrase(client: Client): debug = client.debug def input_flow(): @@ -98,7 +99,7 @@ def test_recover_with_pin_passphrase(client): @pytest.mark.setup_client(uninitialized=True) -def test_abort(client): +def test_abort(client: Client): debug = client.debug def input_flow(): @@ -118,7 +119,7 @@ def test_abort(client): @pytest.mark.setup_client(uninitialized=True) -def test_noabort(client): +def test_noabort(client: Client): debug = client.debug def input_flow(): @@ -138,7 +139,7 @@ def test_noabort(client): @pytest.mark.setup_client(uninitialized=True) -def test_ask_word_number(client): +def test_ask_word_number(client: Client): debug = client.debug def input_flow_retry_first(): @@ -230,7 +231,7 @@ def test_ask_word_number(client): @pytest.mark.setup_client(uninitialized=True) @pytest.mark.parametrize("nth_word", range(3)) -def test_wrong_nth_word(client, nth_word): +def test_wrong_nth_word(client: Client, nth_word): debug = client.debug share = MNEMONIC_SLIP39_BASIC_20_3of6[0].split(" ") @@ -269,7 +270,7 @@ def test_wrong_nth_word(client, nth_word): @pytest.mark.setup_client(uninitialized=True) -def test_same_share(client): +def test_same_share(client: Client): debug = client.debug first_share = MNEMONIC_SLIP39_BASIC_20_3of6[0].split(" ") # second share is first 4 words of first @@ -306,7 +307,7 @@ def test_same_share(client): @pytest.mark.setup_client(uninitialized=True) -def test_1of1(client): +def test_1of1(client: Client): debug = client.debug def input_flow(): diff --git a/tests/device_tests/reset_recovery/test_recovery_slip39_basic_dryrun.py b/tests/device_tests/reset_recovery/test_recovery_slip39_basic_dryrun.py index 0a24659c3..2bf2a3892 100644 --- a/tests/device_tests/reset_recovery/test_recovery_slip39_basic_dryrun.py +++ b/tests/device_tests/reset_recovery/test_recovery_slip39_basic_dryrun.py @@ -17,6 +17,7 @@ import pytest from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from ...common import recovery_enter_shares @@ -36,7 +37,7 @@ INVALID_SHARES_20_2of3 = [ @pytest.mark.setup_client(mnemonic=SHARES_20_2of3[0:2]) -def test_2of3_dryrun(client): +def test_2of3_dryrun(client: Client): debug = client.debug def input_flow(): @@ -63,7 +64,7 @@ def test_2of3_dryrun(client): @pytest.mark.setup_client(mnemonic=SHARES_20_2of3[0:2]) -def test_2of3_invalid_seed_dryrun(client): +def test_2of3_invalid_seed_dryrun(client: Client): debug = client.debug def input_flow(): diff --git a/tests/device_tests/reset_recovery/test_reset_backup.py b/tests/device_tests/reset_recovery/test_reset_backup.py index 47bc5b084..ad8e50223 100644 --- a/tests/device_tests/reset_recovery/test_reset_backup.py +++ b/tests/device_tests/reset_recovery/test_reset_backup.py @@ -21,12 +21,13 @@ import pytest from shamir_mnemonic import shamir from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import BackupType, ButtonRequestType as B from ...common import EXTERNAL_ENTROPY, click_through, read_and_confirm_mnemonic -def backup_flow_bip39(client): +def backup_flow_bip39(client: Client): mnemonic = None def input_flow(): @@ -65,7 +66,7 @@ def backup_flow_bip39(client): return mnemonic.encode() -def backup_flow_slip39_basic(client): +def backup_flow_slip39_basic(client: Client): mnemonics = [] def input_flow(): @@ -111,7 +112,7 @@ def backup_flow_slip39_basic(client): return ems.ciphertext -def backup_flow_slip39_advanced(client): +def backup_flow_slip39_advanced(client: Client): mnemonics = [] def input_flow(): @@ -181,7 +182,7 @@ VECTORS = [ @pytest.mark.skip_t1 @pytest.mark.parametrize("backup_type, backup_flow", VECTORS) @pytest.mark.setup_client(uninitialized=True) -def test_skip_backup_msg(client, backup_type, backup_flow): +def test_skip_backup_msg(client: Client, backup_type, backup_flow): os_urandom = mock.Mock(return_value=EXTERNAL_ENTROPY) with mock.patch("os.urandom", os_urandom), client: @@ -216,7 +217,7 @@ def test_skip_backup_msg(client, backup_type, backup_flow): @pytest.mark.skip_t1 @pytest.mark.parametrize("backup_type, backup_flow", VECTORS) @pytest.mark.setup_client(uninitialized=True) -def test_skip_backup_manual(client, backup_type, backup_flow): +def test_skip_backup_manual(client: Client, backup_type, backup_flow): def reset_skip_input_flow(): yield # Confirm Recovery client.debug.press_yes() diff --git a/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py b/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py index 206882d97..31ada6bcc 100644 --- a/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py +++ b/tests/device_tests/reset_recovery/test_reset_bip39_skipbackup.py @@ -18,6 +18,7 @@ import pytest from mnemonic import Mnemonic from trezorlib import messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import generate_entropy @@ -28,7 +29,7 @@ STRENGTH = 128 @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_skip_backup(client): +def test_reset_device_skip_backup(client: Client): ret = client.call_raw( messages.ResetDevice( display_random=False, @@ -97,7 +98,7 @@ def test_reset_device_skip_backup(client): @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_skip_backup_break(client): +def test_reset_device_skip_backup_break(client: Client): ret = client.call_raw( messages.ResetDevice( display_random=False, @@ -150,13 +151,13 @@ def test_reset_device_skip_backup_break(client): assert ret.no_backup is False -def test_initialized_device_backup_fail(client): +def test_initialized_device_backup_fail(client: Client): ret = client.call_raw(messages.BackupDevice()) assert isinstance(ret, messages.Failure) @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_skip_backup_show_entropy_fail(client): +def test_reset_device_skip_backup_show_entropy_fail(client: Client): ret = client.call_raw( messages.ResetDevice( display_random=True, diff --git a/tests/device_tests/reset_recovery/test_reset_bip39_t1.py b/tests/device_tests/reset_recovery/test_reset_bip39_t1.py index 98eeeb2a8..95269f2ff 100644 --- a/tests/device_tests/reset_recovery/test_reset_bip39_t1.py +++ b/tests/device_tests/reset_recovery/test_reset_bip39_t1.py @@ -18,13 +18,14 @@ import pytest from mnemonic import Mnemonic from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ...common import generate_entropy pytestmark = pytest.mark.skip_t2 -def reset_device(client, strength): +def reset_device(client: Client, strength): # No PIN, no passphrase external_entropy = b"zlutoucky kun upel divoke ody" * 2 @@ -91,17 +92,17 @@ def reset_device(client, strength): @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_128(client): +def test_reset_device_128(client: Client): reset_device(client, 128) @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_192(client): +def test_reset_device_192(client: Client): reset_device(client, 192) @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_256_pin(client): +def test_reset_device_256_pin(client: Client): external_entropy = b"zlutoucky kun upel divoke ody" * 2 strength = 256 @@ -191,7 +192,7 @@ def test_reset_device_256_pin(client): @pytest.mark.setup_client(uninitialized=True) -def test_failed_pin(client): +def test_failed_pin(client: Client): # external_entropy = b'zlutoucky kun upel divoke ody' * 2 strength = 128 @@ -235,6 +236,6 @@ def test_failed_pin(client): assert isinstance(ret, messages.Failure) -def test_already_initialized(client): +def test_already_initialized(client: Client): with pytest.raises(Exception): device.reset(client, False, 128, True, True, "label", "en-US") diff --git a/tests/device_tests/reset_recovery/test_reset_bip39_t2.py b/tests/device_tests/reset_recovery/test_reset_bip39_t2.py index 24da12674..8c5d0de39 100644 --- a/tests/device_tests/reset_recovery/test_reset_bip39_t2.py +++ b/tests/device_tests/reset_recovery/test_reset_bip39_t2.py @@ -20,6 +20,7 @@ import pytest from mnemonic import Mnemonic from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import ButtonRequestType as B @@ -35,7 +36,7 @@ pytestmark = [pytest.mark.skip_t1] EXTERNAL_ENTROPY = b"zlutoucky kun upel divoke ody" * 2 -def reset_device(client, strength): +def reset_device(client: Client, strength): mnemonic = None def input_flow(): @@ -108,17 +109,17 @@ def reset_device(client, strength): @pytest.mark.setup_client(uninitialized=True) -def test_reset_device(client): +def test_reset_device(client: Client): reset_device(client, 128) # 12 words @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_192(client): +def test_reset_device_192(client: Client): reset_device(client, 192) # 18 words @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_pin(client): +def test_reset_device_pin(client: Client): mnemonic = None strength = 256 # 24 words @@ -214,7 +215,7 @@ def test_reset_device_pin(client): @pytest.mark.setup_client(uninitialized=True) -def test_reset_failed_check(client): +def test_reset_failed_check(client: Client): mnemonic = None strength = 256 # 24 words @@ -294,7 +295,7 @@ def test_reset_failed_check(client): @pytest.mark.setup_client(uninitialized=True) -def test_failed_pin(client): +def test_failed_pin(client: Client): # external_entropy = b'zlutoucky kun upel divoke ody' * 2 strength = 128 ret = client.call_raw( @@ -320,6 +321,6 @@ def test_failed_pin(client): @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_already_initialized(client): +def test_already_initialized(client: Client): with pytest.raises(Exception): device.reset(client, False, 128, True, True, "label", "en-US") diff --git a/tests/device_tests/reset_recovery/test_reset_recovery_bip39.py b/tests/device_tests/reset_recovery/test_reset_recovery_bip39.py index 9173d285d..9e976aaa1 100644 --- a/tests/device_tests/reset_recovery/test_reset_recovery_bip39.py +++ b/tests/device_tests/reset_recovery/test_reset_recovery_bip39.py @@ -20,6 +20,7 @@ from unittest import mock import pytest from trezorlib import btc, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import BackupType, ButtonRequestType as B from trezorlib.tools import parse_path @@ -28,17 +29,17 @@ from ...common import EXTERNAL_ENTROPY, click_through, read_and_confirm_mnemonic @pytest.mark.skip_t1 @pytest.mark.setup_client(uninitialized=True) -def test_reset_recovery(client): +def test_reset_recovery(client: Client): mnemonic = reset(client) - address_before = btc.get_address(client, "Bitcoin", parse_path("44'/0'/0'/0/0")) + address_before = btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/0/0")) device.wipe(client) recover(client, mnemonic) - address_after = btc.get_address(client, "Bitcoin", parse_path("44'/0'/0'/0/0")) + address_after = btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/0/0")) assert address_before == address_after -def reset(client, strength=128, skip_backup=False): +def reset(client: Client, strength=128, skip_backup=False): mnemonic = None def input_flow(): @@ -100,7 +101,7 @@ def reset(client, strength=128, skip_backup=False): return mnemonic -def recover(client, mnemonic): +def recover(client: Client, mnemonic): debug = client.debug words = mnemonic.split(" ") diff --git a/tests/device_tests/reset_recovery/test_reset_recovery_slip39_advanced.py b/tests/device_tests/reset_recovery/test_reset_recovery_slip39_advanced.py index 710f7baef..92ac15c3b 100644 --- a/tests/device_tests/reset_recovery/test_reset_recovery_slip39_advanced.py +++ b/tests/device_tests/reset_recovery/test_reset_recovery_slip39_advanced.py @@ -19,6 +19,7 @@ from unittest import mock import pytest from trezorlib import btc, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import BackupType, ButtonRequestType as B from trezorlib.tools import parse_path @@ -32,9 +33,9 @@ from ...common import ( @pytest.mark.skip_t1 @pytest.mark.setup_client(uninitialized=True) -def test_reset_recovery(client): +def test_reset_recovery(client: Client): mnemonics = reset(client) - address_before = btc.get_address(client, "Bitcoin", parse_path("44'/0'/0'/0/0")) + address_before = btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/0/0")) # we're generating 3of5 groups 3of5 shares each test_combinations = [ mnemonics[0:3] # shares 1-3 from groups 1-3 @@ -53,11 +54,13 @@ def test_reset_recovery(client): for combination in test_combinations: device.wipe(client) recover(client, combination) - address_after = btc.get_address(client, "Bitcoin", parse_path("44'/0'/0'/0/0")) + address_after = btc.get_address( + client, "Bitcoin", parse_path("m/44h/0h/0h/0/0") + ) assert address_before == address_after -def reset(client, strength=128): +def reset(client: Client, strength=128): all_mnemonics = [] def input_flow(): @@ -150,7 +153,7 @@ def reset(client, strength=128): return all_mnemonics -def recover(client, shares): +def recover(client: Client, shares): debug = client.debug def input_flow(): diff --git a/tests/device_tests/reset_recovery/test_reset_recovery_slip39_basic.py b/tests/device_tests/reset_recovery/test_reset_recovery_slip39_basic.py index 41079d8f7..96521dd53 100644 --- a/tests/device_tests/reset_recovery/test_reset_recovery_slip39_basic.py +++ b/tests/device_tests/reset_recovery/test_reset_recovery_slip39_basic.py @@ -20,6 +20,7 @@ from unittest import mock import pytest from trezorlib import btc, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import BackupType, ButtonRequestType as B from trezorlib.tools import parse_path @@ -32,19 +33,21 @@ MOCK_OS_URANDOM = mock.Mock(return_value=EXTERNAL_ENTROPY) @pytest.mark.skip_t1 @pytest.mark.setup_client(uninitialized=True) @mock.patch("os.urandom", MOCK_OS_URANDOM) -def test_reset_recovery(client): +def test_reset_recovery(client: Client): mnemonics = reset(client) - address_before = btc.get_address(client, "Bitcoin", parse_path("44'/0'/0'/0/0")) + address_before = btc.get_address(client, "Bitcoin", parse_path("m/44h/0h/0h/0/0")) for share_subset in itertools.combinations(mnemonics, 3): device.wipe(client) selected_mnemonics = share_subset recover(client, selected_mnemonics) - address_after = btc.get_address(client, "Bitcoin", parse_path("44'/0'/0'/0/0")) + address_after = btc.get_address( + client, "Bitcoin", parse_path("m/44h/0h/0h/0/0") + ) assert address_before == address_after -def reset(client, strength=128): +def reset(client: Client, strength=128): all_mnemonics = [] def input_flow(): @@ -122,7 +125,7 @@ def reset(client, strength=128): return all_mnemonics -def recover(client, shares): +def recover(client: Client, shares): debug = client.debug def input_flow(): diff --git a/tests/device_tests/reset_recovery/test_reset_slip39_advanced.py b/tests/device_tests/reset_recovery/test_reset_slip39_advanced.py index 0d0fc127c..d3f399aed 100644 --- a/tests/device_tests/reset_recovery/test_reset_slip39_advanced.py +++ b/tests/device_tests/reset_recovery/test_reset_slip39_advanced.py @@ -20,6 +20,7 @@ import pytest from shamir_mnemonic import shamir from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import BackupType, ButtonRequestType as B @@ -32,7 +33,7 @@ EXTERNAL_ENTROPY = b"zlutoucky kun upel divoke ody" * 2 # TODO: test with different options @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_slip39_advanced(client): +def test_reset_device_slip39_advanced(client: Client): strength = 128 member_threshold = 3 all_mnemonics = [] diff --git a/tests/device_tests/reset_recovery/test_reset_slip39_basic.py b/tests/device_tests/reset_recovery/test_reset_slip39_basic.py index 48186b646..e10fde103 100644 --- a/tests/device_tests/reset_recovery/test_reset_slip39_basic.py +++ b/tests/device_tests/reset_recovery/test_reset_slip39_basic.py @@ -21,6 +21,7 @@ import pytest from shamir_mnemonic import MnemonicError, shamir from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import BackupType, ButtonRequestType as B @@ -34,7 +35,7 @@ from ...common import ( pytestmark = [pytest.mark.skip_t1] -def reset_device(client, strength): +def reset_device(client: Client, strength): member_threshold = 3 all_mnemonics = [] @@ -125,12 +126,12 @@ def reset_device(client, strength): @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_slip39_basic(client): +def test_reset_device_slip39_basic(client: Client): reset_device(client, 128) @pytest.mark.setup_client(uninitialized=True) -def test_reset_device_slip39_basic_256(client): +def test_reset_device_slip39_basic_256(client: Client): reset_device(client, 256) diff --git a/tests/device_tests/ripple/test_get_address.py b/tests/device_tests/ripple/test_get_address.py index 3a2244f32..147c984bb 100644 --- a/tests/device_tests/ripple/test_get_address.py +++ b/tests/device_tests/ripple/test_get_address.py @@ -16,6 +16,7 @@ import pytest +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.ripple import get_address from trezorlib.tools import parse_path @@ -32,20 +33,20 @@ pytestmark = [ ] -def test_ripple_get_address(client): +def test_ripple_get_address(client: Client): # data from https://iancoleman.io/bip39/ - address = get_address(client, parse_path("m/44'/144'/0'/0/0")) + address = get_address(client, parse_path("m/44h/144h/0h/0/0")) assert address == "rNaqKtKrMSwpwZSzRckPf7S96DkimjkF4H" - address = get_address(client, parse_path("m/44'/144'/0'/0/1")) + address = get_address(client, parse_path("m/44h/144h/0h/0/1")) assert address == "rBKz5MC2iXdoS3XgnNSYmF69K1Yo4NS3Ws" - address = get_address(client, parse_path("m/44'/144'/1'/0/0")) + address = get_address(client, parse_path("m/44h/144h/1h/0/0")) assert address == "rJX2KwzaLJDyFhhtXKi3htaLfaUH2tptEX" @pytest.mark.setup_client(mnemonic=CUSTOM_MNEMONIC) -def test_ripple_get_address_other(client): +def test_ripple_get_address_other(client: Client): # data from https://github.com/you21979/node-ripple-bip32/blob/master/test/test.js - address = get_address(client, parse_path("m/44'/144'/0'/0/0")) + address = get_address(client, parse_path("m/44h/144h/0h/0/0")) assert address == "r4ocGE47gm4G4LkA9mriVHQqzpMLBTgnTY" - address = get_address(client, parse_path("m/44'/144'/0'/0/1")) + address = get_address(client, parse_path("m/44h/144h/0h/0/1")) assert address == "rUt9ULSrUvfCmke8HTFU1szbmFpWzVbBXW" diff --git a/tests/device_tests/ripple/test_sign_tx.py b/tests/device_tests/ripple/test_sign_tx.py index fbc20bce1..ef3f03aa6 100644 --- a/tests/device_tests/ripple/test_sign_tx.py +++ b/tests/device_tests/ripple/test_sign_tx.py @@ -17,6 +17,7 @@ import pytest from trezorlib import ripple +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -27,7 +28,7 @@ pytestmark = [ ] -def test_ripple_sign_simple_tx(client): +def test_ripple_sign_simple_tx(client: Client): msg = ripple.create_sign_tx_msg( { "TransactionType": "Payment", @@ -40,7 +41,7 @@ def test_ripple_sign_simple_tx(client): "Sequence": 25, } ) - resp = ripple.sign_tx(client, parse_path("m/44'/144'/0'/0/0"), msg) + resp = ripple.sign_tx(client, parse_path("m/44h/144h/0h/0/0"), msg) assert ( resp.signature.hex() == "3045022100e243ef623675eeeb95965c35c3e06d63a9fc68bb37e17dc87af9c0af83ec057e02206ca8aa5eaab8396397aef6d38d25710441faf7c79d292ee1d627df15ad9346c0" @@ -61,7 +62,7 @@ def test_ripple_sign_simple_tx(client): "Sequence": 1, } ) - resp = ripple.sign_tx(client, parse_path("m/44'/144'/0'/0/2"), msg) + resp = ripple.sign_tx(client, parse_path("m/44h/144h/0h/0/2"), msg) assert ( resp.signature.hex() == "3044022069900e6e578997fad5189981b74b16badc7ba8b9f1052694033fa2779113ddc002206c8006ada310edf099fb22c0c12073550c8fc73247b236a974c5f1144831dd5f" @@ -85,7 +86,7 @@ def test_ripple_sign_simple_tx(client): "LastLedgerSequence": 333111, } ) - resp = ripple.sign_tx(client, parse_path("m/44'/144'/0'/0/2"), msg) + resp = ripple.sign_tx(client, parse_path("m/44h/144h/0h/0/2"), msg) assert ( resp.signature.hex() == "30450221008770743a472bb2d1c746a53ef131cc17cc118d538ec910ca928d221db4494cf702201e4ef242d6c3bff110c3cc3897a471fed0f5ac10987ea57da63f98dfa01e94df" @@ -96,7 +97,7 @@ def test_ripple_sign_simple_tx(client): ) -def test_ripple_sign_invalid_fee(client): +def test_ripple_sign_invalid_fee(client: Client): msg = ripple.create_sign_tx_msg( { "TransactionType": "Payment", @@ -113,4 +114,4 @@ def test_ripple_sign_invalid_fee(client): TrezorFailure, match="ProcessError: Fee must be in the range of 10 to 10,000 drops", ): - ripple.sign_tx(client, parse_path("m/44'/144'/0'/0/2"), msg) + ripple.sign_tx(client, parse_path("m/44h/144h/0h/0/2"), msg) diff --git a/tests/device_tests/stellar/test_stellar.py b/tests/device_tests/stellar/test_stellar.py index db3f909fe..b87b891fa 100644 --- a/tests/device_tests/stellar/test_stellar.py +++ b/tests/device_tests/stellar/test_stellar.py @@ -55,6 +55,7 @@ from base64 import b64encode import pytest from trezorlib import messages, protobuf, stellar +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path from ...common import parametrize_using_common_fixtures @@ -82,7 +83,7 @@ def parameters_to_proto(parameters): @pytest.mark.altcoin @pytest.mark.stellar @parametrize_using_common_fixtures("stellar/sign_tx.json") -def test_sign_tx(client, parameters, result): +def test_sign_tx(client: Client, parameters, result): tx, operations = parameters_to_proto(parameters) response = stellar.sign_tx( client, tx, operations, tx.address_n, tx.network_passphrase @@ -112,7 +113,7 @@ def test_xdr(parameters, result): @pytest.mark.altcoin @pytest.mark.stellar @parametrize_using_common_fixtures("stellar/get_address.json") -def test_get_address(client, parameters, result): +def test_get_address(client: Client, parameters, result): address_n = parse_path(parameters["path"]) address = stellar.get_address(client, address_n, show_display=True) assert address == result["address"] diff --git a/tests/device_tests/test_autolock.py b/tests/device_tests/test_autolock.py index 8cc92fe9c..8b3c7d812 100644 --- a/tests/device_tests/test_autolock.py +++ b/tests/device_tests/test_autolock.py @@ -19,6 +19,7 @@ import time import pytest from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from ..common import TEST_ADDRESS_N, get_test_address @@ -28,7 +29,7 @@ PIN4 = "1234" pytestmark = pytest.mark.setup_client(pin=PIN4) -def pin_request(client): +def pin_request(client: Client): return ( messages.PinMatrixRequest if client.features.model == "1" @@ -36,7 +37,7 @@ def pin_request(client): ) -def set_autolock_delay(client, delay): +def set_autolock_delay(client: Client, delay): with client: client.use_pin_sequence([PIN4]) client.set_expected_responses( @@ -50,7 +51,7 @@ def set_autolock_delay(client, delay): device.apply_settings(client, auto_lock_delay_ms=delay) -def test_apply_auto_lock_delay(client): +def test_apply_auto_lock_delay(client: Client): set_autolock_delay(client, 10 * 1000) time.sleep(0.1) # sleep less than auto-lock delay @@ -77,12 +78,12 @@ def test_apply_auto_lock_delay(client): 536870, # 149 hours, maximum ], ) -def test_apply_auto_lock_delay_valid(client, seconds): +def test_apply_auto_lock_delay_valid(client: Client, seconds): set_autolock_delay(client, seconds * 1000) assert client.features.auto_lock_delay_ms == seconds * 1000 -def test_autolock_default_value(client): +def test_autolock_default_value(client: Client): assert client.features.auto_lock_delay_ms is None with client: client.use_pin_sequence([PIN4]) @@ -95,7 +96,7 @@ def test_autolock_default_value(client): "seconds", [0, 1, 9, 536871, 2 ** 22], ) -def test_apply_auto_lock_delay_out_of_range(client, seconds): +def test_apply_auto_lock_delay_out_of_range(client: Client, seconds): with client: client.use_pin_sequence([PIN4]) client.set_expected_responses( @@ -111,7 +112,7 @@ def test_apply_auto_lock_delay_out_of_range(client, seconds): @pytest.mark.skip_t1 -def test_autolock_cancels_ui(client): +def test_autolock_cancels_ui(client: Client): set_autolock_delay(client, 10 * 1000) resp = client.call_raw( diff --git a/tests/device_tests/test_basic.py b/tests/device_tests/test_basic.py index f1b2b9a28..356759797 100644 --- a/tests/device_tests/test_basic.py +++ b/tests/device_tests/test_basic.py @@ -15,9 +15,10 @@ # If not, see . from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client -def test_features(client): +def test_features(client: Client): f0 = client.features # client erases session_id from its features f0.session_id = client.session_id @@ -25,12 +26,12 @@ def test_features(client): assert f0 == f1 -def test_ping(client): +def test_ping(client: Client): ping = client.call(messages.Ping(message="ahoj!")) assert ping == messages.Success(message="ahoj!") -def test_device_id_same(client): +def test_device_id_same(client: Client): id1 = client.get_device_id() client.init_device() id2 = client.get_device_id() @@ -42,7 +43,7 @@ def test_device_id_same(client): assert id1 == id2 -def test_device_id_different(client): +def test_device_id_different(client: Client): id1 = client.get_device_id() device.wipe(client) id2 = client.get_device_id() diff --git a/tests/device_tests/test_bip32_speed.py b/tests/device_tests/test_bip32_speed.py index 0de66920b..f6c9376f0 100644 --- a/tests/device_tests/test_bip32_speed.py +++ b/tests/device_tests/test_bip32_speed.py @@ -19,6 +19,7 @@ import time import pytest from trezorlib import btc +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import H_ pytestmark = [ @@ -27,7 +28,7 @@ pytestmark = [ ] -def test_public_ckd(client): +def test_public_ckd(client: Client): btc.get_address(client, "Bitcoin", []) # to compute root node via BIP39 for depth in range(8): @@ -39,7 +40,7 @@ def test_public_ckd(client): assert delay <= expected -def test_private_ckd(client): +def test_private_ckd(client: Client): btc.get_address(client, "Bitcoin", []) # to compute root node via BIP39 for depth in range(8): @@ -52,7 +53,7 @@ def test_private_ckd(client): assert delay <= expected -def test_cache(client): +def test_cache(client: Client): start = time.time() for x in range(10): btc.get_address(client, "Bitcoin", [x, 2, 3, 4, 5, 6, 7, 8]) diff --git a/tests/device_tests/test_cancel.py b/tests/device_tests/test_cancel.py index 8a5f72639..be15f763e 100644 --- a/tests/device_tests/test_cancel.py +++ b/tests/device_tests/test_cancel.py @@ -17,6 +17,7 @@ import pytest import trezorlib.messages as m +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import Cancelled from ..common import TEST_ADDRESS_N @@ -34,7 +35,7 @@ from ..common import TEST_ADDRESS_N ), ], ) -def test_cancel_message_via_cancel(client, message): +def test_cancel_message_via_cancel(client: Client, message): def input_flow(): yield client.cancel() @@ -57,7 +58,7 @@ def test_cancel_message_via_cancel(client, message): ), ], ) -def test_cancel_message_via_initialize(client, message): +def test_cancel_message_via_initialize(client: Client, message): resp = client.call_raw(message) assert isinstance(resp, m.ButtonRequest) @@ -70,7 +71,7 @@ def test_cancel_message_via_initialize(client, message): @pytest.mark.skip_t1 -def test_cancel_on_paginated(client): +def test_cancel_on_paginated(client: Client): """Check that device is responsive on paginated screen. See #1708.""" # In #1708, the device would ignore USB (or UDP) events while waiting for the user # to page through the screen. This means that this testcase, instead of failing, diff --git a/tests/device_tests/test_debuglink.py b/tests/device_tests/test_debuglink.py index 88c958b13..bb1824eb7 100644 --- a/tests/device_tests/test_debuglink.py +++ b/tests/device_tests/test_debuglink.py @@ -17,20 +17,21 @@ import pytest from trezorlib import debuglink, device, messages, misc +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.transport import udp from ..common import MNEMONIC12 @pytest.mark.skip_t2 -def test_layout(client): +def test_layout(client: Client): layout = client.debug.state().layout assert len(layout) == 1024 @pytest.mark.skip_t2 @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_mnemonic(client): +def test_mnemonic(client: Client): client.ensure_unlocked() mnemonic = client.debug.state().mnemonic_secret assert mnemonic == MNEMONIC12.encode() @@ -38,7 +39,7 @@ def test_mnemonic(client): @pytest.mark.skip_t2 @pytest.mark.setup_client(mnemonic=MNEMONIC12, pin="1234", passphrase="") -def test_pin(client): +def test_pin(client: Client): resp = client.call_raw(messages.GetAddress()) assert isinstance(resp, messages.PinMatrixRequest) @@ -55,7 +56,7 @@ def test_pin(client): @pytest.mark.skip_t1 -def test_softlock_instability(client): +def test_softlock_instability(client: Client): def load_device(): debuglink.load_device( client, diff --git a/tests/device_tests/test_msg_applysettings.py b/tests/device_tests/test_msg_applysettings.py index 8e85ff475..984690868 100644 --- a/tests/device_tests/test_msg_applysettings.py +++ b/tests/device_tests/test_msg_applysettings.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, device, exceptions, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tools import parse_path EXPECTED_RESPONSES_NOPIN = [ @@ -32,7 +33,7 @@ PIN4 = "1234" pytestmark = pytest.mark.setup_client(pin=PIN4) -def _set_expected_responses(client): +def _set_expected_responses(client: Client): client.use_pin_sequence([PIN4]) if client.features.model == "1": client.set_expected_responses(EXPECTED_RESPONSES_PIN_T1) @@ -40,7 +41,7 @@ def _set_expected_responses(client): client.set_expected_responses(EXPECTED_RESPONSES_PIN_TT) -def test_apply_settings(client): +def test_apply_settings(client: Client): assert client.features.label == "test" with client: @@ -51,7 +52,7 @@ def test_apply_settings(client): @pytest.mark.skip_t1 -def test_apply_settings_rotation(client): +def test_apply_settings_rotation(client: Client): assert client.features.display_rotation is None with client: @@ -62,7 +63,7 @@ def test_apply_settings_rotation(client): @pytest.mark.skip_t2 -def test_invalid_language(client): +def test_invalid_language(client: Client): assert client.features.language == "en-US" with client: @@ -73,7 +74,7 @@ def test_invalid_language(client): @pytest.mark.setup_client(pin=PIN4, passphrase=False) -def test_apply_settings_passphrase(client): +def test_apply_settings_passphrase(client: Client): with client: _set_expected_responses(client) device.apply_settings(client, use_passphrase=True) @@ -95,7 +96,7 @@ def test_apply_settings_passphrase(client): @pytest.mark.setup_client(passphrase=False) @pytest.mark.skip_t1 -def test_apply_settings_passphrase_on_device(client): +def test_apply_settings_passphrase_on_device(client: Client): # enable passphrase with client: client.set_expected_responses(EXPECTED_RESPONSES_NOPIN) @@ -129,7 +130,7 @@ def test_apply_settings_passphrase_on_device(client): @pytest.mark.skip_t1 -def test_apply_homescreen_toif(client): +def test_apply_homescreen_toif(client: Client): img = b"TOIf\x90\x00\x90\x00~\x00\x00\x00\xed\xd2\xcb\r\x83@\x10D\xc1^.\xde#!\xac31\x99\x10\x8aC%\x14~\x16\x92Y9\x02WI3\x01<\xf5cI2d\x1es(\xe1[\xdbn\xba\xca\xe8s7\xa4\xd5\xd4\xb3\x13\xbdw\xf6:\xf3\xd1\xe7%\xc7]\xdd_\xb3\x9e\x9f\x9e\x9fN\xed\xaaE\xef\xdc\xcf$D\xa7\xa4X\r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0OV" with client: @@ -156,14 +157,14 @@ def test_apply_homescreen_toif(client): ], ) @pytest.mark.skip_t1 -def test_apply_homescreen_toif_fail(client, toif_data): +def test_apply_homescreen_toif_fail(client: Client, toif_data): with pytest.raises(exceptions.TrezorFailure), client: client.use_pin_sequence([PIN4]) device.apply_settings(client, homescreen=toif_data) @pytest.mark.skip_t2 -def test_apply_homescreen(client): +def test_apply_homescreen(client: Client): img = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\x04\x80\x00\x00\x00\x00\x00\x00\x00\x00\x04\x88\x02\x00\x00\x00\x02\x91\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x90@\x00\x11@\x00\x00\x00\x00\x00\x00\x08\x00\x10\x92\x12\x04\x00\x00\x05\x12D\x00\x00\x00\x00\x00 \x00\x00\x08\x00Q\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x00\x00\x10\x02 \x01\x04J\x00)$\x00\x00\x00\x00\x80\x00\x00\x00\x00\x08\x10\xa1\x00\x00\x02\x81 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\tP\x00\x00\x00\x00\x00\x00 \x00\x00\xa0\x00\xa0R \x12\x84\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x08\x00\tP\x00\x00\x00\x00 \x00\x04 \x00\x80\x02\x00@\x02T\xc2 \x00\x00\x00\x00\x00\x00\x00\x10@\x00)\t@\n\xa0\x80\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x80@\x14\xa9H\x04\x00\x00\x88@\x00\x00\x00\x00\x00\x02\x02$\x00\x15B@\x00\nP\x00\x00\x00\x00\x00\x80\x00\x00\x91\x01UP\x00\x00 \x02\x00\x00\x00\x00\x00\x00\x02\x08@ Z\xa5 \x00\x00\x80\x00\x00\x00\x00\x00\x00\x08\xa1%\x14*\xa0\x00\x00\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00@\xaa\x91 \x00\x05E\x80\x00\x00\x00\x00\x00\x02*T\x05-D\x00\x00\x05 @\x00\x00\x00\x00\x00%@\x80\x11V\xa0\x88\x00\x05@\xb0\x00\x00\x00\x00\x00\x818$\x04\xabD \x00\x06\xa1T\x00\x00\x00\x00\x02\x03\xb8\x01R\xd5\x01\x00\x00\x05AP\x00\x00\x00\x00\x08\xadT\x00\x05j\xa4@\x00\x87ah\x00\x00\x00\x00\x02\x8d\xb8\x08\x00.\x01\x00\x00\x02\xa5\xa8\x10\x00\x00\x00*\xc1\xec \n\xaa\x88 \x02@\xf6\xd0\x02\x00\x00\x00\x0bB\xb6\x14@U"\x80\x00\x01{`\x00\x00\x00\x00M\xa3\xf8 \x15*\x00\x00\x00\x10n\xc0\x04\x00\x00\x02\x06\xc2\xa8)\x00\x96\x84\x80\x00\x00\x1b\x00\x00\x80@\x10\x87\xa7\xf0\x84\x10\xaa\x10\x00\x00D\x00\x00\x02 \x00\x8a\x06\xfa\xe0P\n-\x02@\x00\x12\x00\x00\x00\x00\x10@\x83\xdf\xa0\x00\x08\xaa@\x00\x00\x01H\x00\x05H\x04\x12\x01\xf7\x81P\x02T\t\x00\x00\x00 \x00\x00\x84\x10\x00\x00z\x00@)* \x00\x00\x01\n\xa0\x02 \x05\n\x00\x00\x05\x10\x84\xa8\x84\x80\x00\x00@\x14\x00\x92\x10\x80\x00\x04\x11@\tT\x00\x00\x00\x00\n@\x00\x08\x84@$\x00H\x00\x12Q\x02\x00\x00\x00\x00\x90\x02A\x12\xa8\n\xaa\x92\x10\x04\xa8\x10@\x00\x00\x04\x04\x00\x04I\x00\x04\x14H\x80"R\x01\x00\x00\x00!@\x00\x00$\xa0EB\x80\x08\x95hH\x00\x00\x00\x84\x10 \x05Z\x00\x00(\x00\x02\x00\xa1\x01\x00\x00\x04\x00@\x82\x00\xadH*\x92P\x00\xaaP\x00\x00\x00\x00\x11\x02\x01*\xad\x01\x00\x01\x01"\x11D\x08\x00\x00\x10\x80 \x00\x81W\x80J\x94\x04\x08\xa5 !\x00\x00\x00\x02\x00B*\xae\xa1\x00\x80\x10\x01\x08\xa4\x00\x00\x00\x00\x00\x84\x00\t[@"HA\x04E\x00\x84\x00\x00\x00\x10\x00\x01J\xd5\x82\x90\x02\x00!\x02\xa2\x00\x00\x00\x00\x00\x00\x00\x05~\xa0\x00 \x10\n)\x00\x11\x00\x00\x00\x00\x00\x00!U\x80\xa8\x88\x82\x80\x01\x00\x00\x00\x00\x00\x00H@\x11\xaa\xc0\x82\x00 *\n\x00\x00\x00\x00\x00\x00\x00\x00\n\xabb@ \x04\x00! \x84\x00\x00\x00\x00\x02@\xa5\x15A$\x04\x81(\n\x00\x00\x00\x00\x00\x00 \x01\x10\x02\xe0\x91\x02\x00\x00\x04\x00\x00\x00\x00\x00\x00\x01 \xa9\tQH@\x91 P\x00\x00\x00\x00\x00\x00\x08\x00\x00\xa0T\xa5\x00@\x80\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00 T\xa0\t\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00@\x02\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00*\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x10\x00\x00\x10\x02\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00@\x04\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x08@\x10\x00\x00\x00\x00' with client: @@ -172,9 +173,9 @@ def test_apply_homescreen(client): @pytest.mark.setup_client(pin=None) -def test_safety_checks(client): +def test_safety_checks(client: Client): def get_bad_address(): - btc.get_address(client, "Bitcoin", parse_path("m/44'"), show_display=True) + btc.get_address(client, "Bitcoin", parse_path("m/44h"), show_display=True) assert client.features.safety_checks == messages.SafetyCheckLevel.Strict @@ -223,14 +224,14 @@ def test_safety_checks(client): @pytest.mark.skip_t1 -def test_experimental_features(client): +def test_experimental_features(client: Client): def experimental_call(): btc.authorize_coinjoin( client, coordinator="www.example.com", - max_total_fee=10010, - fee_per_anonymity=5000000, # 0.005 % - n=parse_path("m/84'/1'/0'"), + max_total_fee=10_010, + fee_per_anonymity=5_000_000, # 0.005 % + n=parse_path("m/84h/1h/0h"), coin_name="Testnet", script_type=messages.InputScriptType.SPENDWITNESS, ) @@ -277,7 +278,7 @@ def test_experimental_features(client): @pytest.mark.setup_client(pin=None) -def test_label_too_long(client): +def test_label_too_long(client: Client): with pytest.raises(exceptions.TrezorFailure), client: client.set_expected_responses([messages.Failure]) device.apply_settings(client, label="A" * 33) diff --git a/tests/device_tests/test_msg_backup_device.py b/tests/device_tests/test_msg_backup_device.py index 0611e00fe..19a7af978 100644 --- a/tests/device_tests/test_msg_backup_device.py +++ b/tests/device_tests/test_msg_backup_device.py @@ -19,6 +19,7 @@ import pytest import shamir_mnemonic as shamir from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import ButtonRequestType as B @@ -39,7 +40,7 @@ def click_info_button(debug): @pytest.mark.skip_t1 # TODO we want this for t1 too @pytest.mark.setup_client(needs_backup=True, mnemonic=MNEMONIC12) -def test_backup_bip39(client): +def test_backup_bip39(client: Client): assert client.features.needs_backup is True mnemonic = None @@ -82,7 +83,7 @@ def test_backup_bip39(client): @pytest.mark.parametrize( "click_info", [True, False], ids=["click_info", "no_click_info"] ) -def test_backup_slip39_basic(client, click_info: bool): +def test_backup_slip39_basic(client: Client, click_info: bool): assert client.features.needs_backup is True mnemonics = [] @@ -150,7 +151,7 @@ def test_backup_slip39_basic(client, click_info: bool): @pytest.mark.parametrize( "click_info", [True, False], ids=["click_info", "no_click_info"] ) -def test_backup_slip39_advanced(client, click_info: bool): +def test_backup_slip39_advanced(client: Client, click_info: bool): assert client.features.needs_backup is True mnemonics = [] @@ -234,7 +235,7 @@ def test_backup_slip39_advanced(client, click_info: bool): # we only test this with bip39 because the code path is always the same @pytest.mark.setup_client(no_backup=True) -def test_no_backup_fails(client): +def test_no_backup_fails(client: Client): client.ensure_unlocked() assert client.features.initialized is True assert client.features.no_backup is True @@ -247,7 +248,7 @@ def test_no_backup_fails(client): # we only test this with bip39 because the code path is always the same @pytest.mark.setup_client(needs_backup=True) -def test_interrupt_backup_fails(client): +def test_interrupt_backup_fails(client: Client): client.ensure_unlocked() assert client.features.initialized is True assert client.features.needs_backup is True @@ -273,7 +274,7 @@ def test_interrupt_backup_fails(client): # we only test this with bip39 because the code path is always the same @pytest.mark.setup_client(uninitialized=True) -def test_no_backup_show_entropy_fails(client): +def test_no_backup_show_entropy_fails(client: Client): with pytest.raises( TrezorFailure, match=r".*Can't show internal entropy when backup is skipped" ): diff --git a/tests/device_tests/test_msg_change_wipe_code_t1.py b/tests/device_tests/test_msg_change_wipe_code_t1.py index 651681d51..4d6b0a6c4 100644 --- a/tests/device_tests/test_msg_change_wipe_code_t1.py +++ b/tests/device_tests/test_msg_change_wipe_code_t1.py @@ -18,6 +18,7 @@ import pytest from trezorlib import device, exceptions, messages from trezorlib.client import MAX_PIN_LENGTH +from trezorlib.debuglink import TrezorClientDebugLink as Client PinType = messages.PinMatrixRequestType @@ -30,7 +31,7 @@ WIPE_CODE_TOO_LONG = WIPE_CODE_MAX + "1" pytestmark = pytest.mark.skip_t2 -def _set_wipe_code(client, pin, wipe_code): +def _set_wipe_code(client: Client, pin, wipe_code): # Set/change wipe code. with client: if client.features.pin_protection: @@ -56,7 +57,7 @@ def _set_wipe_code(client, pin, wipe_code): device.change_wipe_code(client) -def _change_pin(client, old_pin, new_pin): +def _change_pin(client: Client, old_pin, new_pin): assert client.features.pin_protection is True with client: client.use_pin_sequence([old_pin, new_pin, new_pin]) @@ -66,14 +67,14 @@ def _change_pin(client, old_pin, new_pin): return f.failure -def _check_wipe_code(client, pin, wipe_code): +def _check_wipe_code(client: Client, pin, wipe_code): """Check that wipe code is set by changing the PIN to it.""" f = _change_pin(client, pin, wipe_code) assert isinstance(f, messages.Failure) @pytest.mark.setup_client(pin=PIN4) -def test_set_remove_wipe_code(client): +def test_set_remove_wipe_code(client: Client): # Check that wipe code protection status is not revealed in locked state. assert client.features.wipe_code_protection is None @@ -107,7 +108,7 @@ def test_set_remove_wipe_code(client): assert client.features.wipe_code_protection is False -def test_set_wipe_code_mismatch(client): +def test_set_wipe_code_mismatch(client: Client): # Check that there is no wipe code protection. client.ensure_unlocked() assert client.features.wipe_code_protection is False @@ -132,7 +133,7 @@ def test_set_wipe_code_mismatch(client): @pytest.mark.setup_client(pin=PIN4) -def test_set_wipe_code_to_pin(client): +def test_set_wipe_code_to_pin(client: Client): # Check that wipe code protection status is not revealed in locked state. assert client.features.wipe_code_protection is None @@ -155,7 +156,7 @@ def test_set_wipe_code_to_pin(client): assert client.features.wipe_code_protection is False -def test_set_pin_to_wipe_code(client): +def test_set_pin_to_wipe_code(client: Client): # Set wipe code. _set_wipe_code(client, None, WIPE_CODE4) @@ -181,7 +182,7 @@ def test_set_pin_to_wipe_code(client): @pytest.mark.parametrize("invalid_wipe_code", ("1204", "", WIPE_CODE_TOO_LONG)) -def test_set_wipe_code_invalid(client, invalid_wipe_code): +def test_set_wipe_code_invalid(client: Client, invalid_wipe_code): # Let's set the wipe code ret = client.call_raw(messages.ChangeWipeCode()) assert isinstance(ret, messages.ButtonRequest) diff --git a/tests/device_tests/test_msg_change_wipe_code_t2.py b/tests/device_tests/test_msg_change_wipe_code_t2.py index bf82aae10..383f9e24c 100644 --- a/tests/device_tests/test_msg_change_wipe_code_t2.py +++ b/tests/device_tests/test_msg_change_wipe_code_t2.py @@ -18,6 +18,7 @@ import pytest from trezorlib import btc, device, messages from trezorlib.client import MAX_PIN_LENGTH, PASSPHRASE_TEST_PATH +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import Cancelled, TrezorFailure PIN4 = "1234" @@ -28,7 +29,7 @@ WIPE_CODE_MAX = "".join(chr((i % 10) + ord("0")) for i in range(MAX_PIN_LENGTH)) pytestmark = pytest.mark.skip_t1 -def _check_wipe_code(client, pin, wipe_code): +def _check_wipe_code(client: Client, pin, wipe_code): client.init_device() assert client.features.wipe_code_protection is True @@ -42,7 +43,7 @@ def _check_wipe_code(client, pin, wipe_code): device.change_pin(client) -def _ensure_unlocked(client, pin): +def _ensure_unlocked(client: Client, pin): with client: client.use_pin_sequence([pin]) btc.get_address(client, "Testnet", PASSPHRASE_TEST_PATH) @@ -51,7 +52,7 @@ def _ensure_unlocked(client, pin): @pytest.mark.setup_client(pin=PIN4) -def test_set_remove_wipe_code(client): +def test_set_remove_wipe_code(client: Client): # Test set wipe code. assert client.features.wipe_code_protection is None @@ -93,7 +94,7 @@ def test_set_remove_wipe_code(client): assert client.features.wipe_code_protection is False -def test_set_wipe_code_mismatch(client): +def test_set_wipe_code_mismatch(client: Client): # Let's set a wipe code. def input_flow(): yield # do you want to set the wipe code? @@ -121,7 +122,7 @@ def test_set_wipe_code_mismatch(client): @pytest.mark.setup_client(pin=PIN4) -def test_set_wipe_code_to_pin(client): +def test_set_wipe_code_to_pin(client: Client): _ensure_unlocked(client, PIN4) with client: @@ -136,7 +137,7 @@ def test_set_wipe_code_to_pin(client): _check_wipe_code(client, PIN4, WIPE_CODE4) -def test_set_pin_to_wipe_code(client): +def test_set_pin_to_wipe_code(client: Client): # Set wipe code. with client: client.set_expected_responses( diff --git a/tests/device_tests/test_msg_changepin_t1.py b/tests/device_tests/test_msg_changepin_t1.py index b2425581b..d2e49572f 100644 --- a/tests/device_tests/test_msg_changepin_t1.py +++ b/tests/device_tests/test_msg_changepin_t1.py @@ -18,6 +18,7 @@ import pytest from trezorlib import device, messages from trezorlib.client import MAX_PIN_LENGTH +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from ..common import get_test_address @@ -30,7 +31,7 @@ PIN_TOO_LONG = PIN_MAX + "1" pytestmark = pytest.mark.skip_t2 -def _check_pin(client, pin): +def _check_pin(client: Client, pin): client.lock() with client: client.use_pin_sequence([pin]) @@ -38,14 +39,14 @@ def _check_pin(client, pin): get_test_address(client) -def _check_no_pin(client): +def _check_no_pin(client: Client): client.lock() with client: client.set_expected_responses([messages.Address]) get_test_address(client) -def test_set_pin(client): +def test_set_pin(client: Client): assert client.features.pin_protection is False # Check that there's no PIN protection @@ -72,7 +73,7 @@ def test_set_pin(client): @pytest.mark.setup_client(pin=PIN4) -def test_change_pin(client): +def test_change_pin(client: Client): assert client.features.pin_protection is True # Check that there's PIN protection _check_pin(client, PIN4) @@ -99,7 +100,7 @@ def test_change_pin(client): @pytest.mark.setup_client(pin=PIN4) -def test_remove_pin(client): +def test_remove_pin(client: Client): assert client.features.pin_protection is True # Check that there's PIN protection _check_pin(client, PIN4) @@ -122,7 +123,7 @@ def test_remove_pin(client): _check_no_pin(client) -def test_set_mismatch(client): +def test_set_mismatch(client: Client): assert client.features.pin_protection is False # Check that there's no PIN protection _check_no_pin(client) @@ -148,7 +149,7 @@ def test_set_mismatch(client): @pytest.mark.setup_client(pin=PIN4) -def test_change_mismatch(client): +def test_change_mismatch(client: Client): assert client.features.pin_protection is True # Let's set new PIN @@ -172,7 +173,7 @@ def test_change_mismatch(client): @pytest.mark.parametrize("invalid_pin", ("1204", "", PIN_TOO_LONG)) -def test_set_invalid(client, invalid_pin): +def test_set_invalid(client: Client, invalid_pin): assert client.features.pin_protection is False # Let's set an invalid PIN @@ -198,7 +199,7 @@ def test_set_invalid(client, invalid_pin): @pytest.mark.parametrize("invalid_pin", ("1204", "", PIN_TOO_LONG)) @pytest.mark.setup_client(pin=PIN4) -def test_enter_invalid(client, invalid_pin): +def test_enter_invalid(client: Client, invalid_pin): assert client.features.pin_protection is True # use an invalid PIN diff --git a/tests/device_tests/test_msg_changepin_t2.py b/tests/device_tests/test_msg_changepin_t2.py index 903d7ae5d..053519c19 100644 --- a/tests/device_tests/test_msg_changepin_t2.py +++ b/tests/device_tests/test_msg_changepin_t2.py @@ -18,6 +18,7 @@ import pytest from trezorlib import btc, device, messages from trezorlib.client import MAX_PIN_LENGTH, PASSPHRASE_TEST_PATH +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import Cancelled, TrezorFailure PIN4 = "1234" @@ -27,7 +28,7 @@ PIN_MAX = "".join(chr((i % 10) + ord("0")) for i in range(MAX_PIN_LENGTH)) pytestmark = pytest.mark.skip_t1 -def _check_pin(client, pin): +def _check_pin(client: Client, pin): client.lock() assert client.features.pin_protection is True assert client.features.unlocked is False @@ -38,7 +39,7 @@ def _check_pin(client, pin): btc.get_address(client, "Testnet", PASSPHRASE_TEST_PATH) -def _check_no_pin(client): +def _check_no_pin(client: Client): client.lock() assert client.features.pin_protection is False @@ -47,7 +48,7 @@ def _check_no_pin(client): btc.get_address(client, "Testnet", PASSPHRASE_TEST_PATH) -def test_set_pin(client): +def test_set_pin(client: Client): assert client.features.pin_protection is False # Check that there's no PIN protection @@ -67,7 +68,7 @@ def test_set_pin(client): @pytest.mark.setup_client(pin=PIN4) -def test_change_pin(client): +def test_change_pin(client: Client): assert client.features.pin_protection is True # Check current PIN value @@ -89,7 +90,7 @@ def test_change_pin(client): @pytest.mark.setup_client(pin=PIN4) -def test_remove_pin(client): +def test_remove_pin(client: Client): assert client.features.pin_protection is True # Check current PIN value @@ -109,7 +110,7 @@ def test_remove_pin(client): _check_no_pin(client) -def test_set_failed(client): +def test_set_failed(client: Client): assert client.features.pin_protection is False # Check that there's no PIN protection @@ -141,7 +142,7 @@ def test_set_failed(client): @pytest.mark.setup_client(pin=PIN4) -def test_change_failed(client): +def test_change_failed(client: Client): assert client.features.pin_protection is True # Check current PIN value @@ -175,7 +176,7 @@ def test_change_failed(client): @pytest.mark.setup_client(pin=PIN4) -def test_change_invalid_current(client): +def test_change_invalid_current(client: Client): assert client.features.pin_protection is True # Check current PIN value diff --git a/tests/device_tests/test_msg_loaddevice.py b/tests/device_tests/test_msg_loaddevice.py index bbb64221c..48656b973 100644 --- a/tests/device_tests/test_msg_loaddevice.py +++ b/tests/device_tests/test_msg_loaddevice.py @@ -17,6 +17,7 @@ import pytest from trezorlib import debuglink, device +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import BackupType from ..common import ( @@ -29,7 +30,7 @@ from ..common import ( pytestmark = pytest.mark.setup_client(uninitialized=True) -def test_load_device_1(client): +def test_load_device_1(client: Client): debuglink.load_device( client, mnemonic=MNEMONIC12, @@ -46,7 +47,7 @@ def test_load_device_1(client): assert address == "mkqRFzxmkCGX9jxgpqqFHcxRUmLJcLDBer" -def test_load_device_2(client): +def test_load_device_2(client: Client): debuglink.load_device( client, mnemonic=MNEMONIC12, @@ -68,7 +69,7 @@ def test_load_device_2(client): @pytest.mark.skip_t1 -def test_load_device_slip39_basic(client): +def test_load_device_slip39_basic(client: Client): debuglink.load_device( client, mnemonic=MNEMONIC_SLIP39_BASIC_20_3of6, @@ -80,7 +81,7 @@ def test_load_device_slip39_basic(client): @pytest.mark.skip_t1 -def test_load_device_slip39_advanced(client): +def test_load_device_slip39_advanced(client: Client): debuglink.load_device( client, mnemonic=MNEMONIC_SLIP39_ADVANCED_20, @@ -91,7 +92,7 @@ def test_load_device_slip39_advanced(client): assert client.features.backup_type == BackupType.Slip39_Advanced -def test_load_device_utf(client): +def test_load_device_utf(client: Client): words_nfkd = u"Pr\u030ci\u0301s\u030cerne\u030c z\u030clut\u030couc\u030cky\u0301 ku\u030an\u030c u\u0301pe\u030cl d\u030ca\u0301belske\u0301 o\u0301dy za\u0301ker\u030cny\u0301 uc\u030cen\u030c be\u030cz\u030ci\u0301 pode\u0301l zo\u0301ny u\u0301lu\u030a" words_nfc = u"P\u0159\xed\u0161ern\u011b \u017elu\u0165ou\u010dk\xfd k\u016f\u0148 \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy z\xe1ke\u0159n\xfd u\u010de\u0148 b\u011b\u017e\xed pod\xe9l z\xf3ny \xfal\u016f" words_nfkc = u"P\u0159\xed\u0161ern\u011b \u017elu\u0165ou\u010dk\xfd k\u016f\u0148 \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy z\xe1ke\u0159n\xfd u\u010de\u0148 b\u011b\u017e\xed pod\xe9l z\xf3ny \xfal\u016f" diff --git a/tests/device_tests/test_msg_ping.py b/tests/device_tests/test_msg_ping.py index 4c3ea16bc..cc478733d 100644 --- a/tests/device_tests/test_msg_ping.py +++ b/tests/device_tests/test_msg_ping.py @@ -15,9 +15,10 @@ # If not, see . from trezorlib import messages +from trezorlib.debuglink import TrezorClientDebugLink as Client -def test_ping(client): +def test_ping(client: Client): with client: client.set_expected_responses([messages.Success]) res = client.ping("random data") diff --git a/tests/device_tests/test_msg_sd_protect.py b/tests/device_tests/test_msg_sd_protect.py index f45ca3a07..399e77e12 100644 --- a/tests/device_tests/test_msg_sd_protect.py +++ b/tests/device_tests/test_msg_sd_protect.py @@ -17,6 +17,7 @@ import pytest from trezorlib import debuglink, device +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import SdProtectOperationType as Op @@ -25,7 +26,7 @@ from ..common import MNEMONIC12 pytestmark = [pytest.mark.skip_t1, pytest.mark.sd_card] -def test_enable_disable(client): +def test_enable_disable(client: Client): assert client.features.sd_protection is False # Disabling SD protection should fail with pytest.raises(TrezorFailure): @@ -45,7 +46,7 @@ def test_enable_disable(client): assert client.features.sd_protection is False -def test_refresh(client): +def test_refresh(client: Client): assert client.features.sd_protection is False # Enable SD protection device.sd_protect(client, Op.ENABLE) @@ -65,7 +66,7 @@ def test_refresh(client): assert client.features.sd_protection is False -def test_wipe(client): +def test_wipe(client: Client): # Enable SD protection device.sd_protect(client, Op.ENABLE) assert client.features.sd_protection is True diff --git a/tests/device_tests/test_msg_wipedevice.py b/tests/device_tests/test_msg_wipedevice.py index 9e32ea100..d94f392f1 100644 --- a/tests/device_tests/test_msg_wipedevice.py +++ b/tests/device_tests/test_msg_wipedevice.py @@ -19,6 +19,7 @@ import time import pytest from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ..common import get_test_address @@ -26,7 +27,7 @@ PIN4 = "1234" @pytest.mark.setup_client(passphrase=True) -def test_wipe_device(client): +def test_wipe_device(client: Client): assert client.features.initialized is True assert client.features.label == "test" assert client.features.passphrase_protection is True @@ -41,7 +42,7 @@ def test_wipe_device(client): @pytest.mark.setup_client(pin=PIN4) -def test_autolock_not_retained(client): +def test_autolock_not_retained(client: Client): with client: client.use_pin_sequence([PIN4]) device.apply_settings(client, auto_lock_delay_ms=10_000) diff --git a/tests/device_tests/test_passphrase_slip39_advanced.py b/tests/device_tests/test_passphrase_slip39_advanced.py index d90a44997..608278095 100644 --- a/tests/device_tests/test_passphrase_slip39_advanced.py +++ b/tests/device_tests/test_passphrase_slip39_advanced.py @@ -16,6 +16,8 @@ import pytest +from trezorlib.debuglink import TrezorClientDebugLink as Client + from ..common import ( MNEMONIC_SLIP39_ADVANCED_20, MNEMONIC_SLIP39_ADVANCED_33, @@ -25,7 +27,7 @@ from ..common import ( @pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_ADVANCED_20, passphrase=True) @pytest.mark.skip_t1 -def test_128bit_passphrase(client): +def test_128bit_passphrase(client: Client): """ BIP32 Root Key for passphrase TREZOR: provided by Andrew, address calculated via https://iancoleman.io/bip39/ @@ -44,7 +46,7 @@ def test_128bit_passphrase(client): @pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_ADVANCED_33, passphrase=True) @pytest.mark.skip_t1 -def test_256bit_passphrase(client): +def test_256bit_passphrase(client: Client): """ BIP32 Root Key for passphrase TREZOR: provided by Andrew, address calculated via https://iancoleman.io/bip39/ diff --git a/tests/device_tests/test_passphrase_slip39_basic.py b/tests/device_tests/test_passphrase_slip39_basic.py index 00178a268..627b91d78 100644 --- a/tests/device_tests/test_passphrase_slip39_basic.py +++ b/tests/device_tests/test_passphrase_slip39_basic.py @@ -16,12 +16,14 @@ import pytest +from trezorlib.debuglink import TrezorClientDebugLink as Client + from ..common import MNEMONIC_SLIP39_BASIC_20_3of6, get_test_address @pytest.mark.setup_client(mnemonic=MNEMONIC_SLIP39_BASIC_20_3of6, passphrase="TREZOR") @pytest.mark.skip_t1 -def test_3of6_passphrase(client): +def test_3of6_passphrase(client: Client): """ BIP32 Root Key for passphrase TREZOR: provided by Andrew, address calculated via https://iancoleman.io/bip39/ @@ -40,7 +42,7 @@ def test_3of6_passphrase(client): passphrase="TREZOR", ) @pytest.mark.skip_t1 -def test_2of5_passphrase(client): +def test_2of5_passphrase(client: Client): """ BIP32 Root Key for passphrase TREZOR: provided by Andrew, address calculated via https://iancoleman.io/bip39/ diff --git a/tests/device_tests/test_pin.py b/tests/device_tests/test_pin.py index 064c9a903..7c65fc8f9 100644 --- a/tests/device_tests/test_pin.py +++ b/tests/device_tests/test_pin.py @@ -19,6 +19,7 @@ import time import pytest from trezorlib import messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import PinException from ..common import get_test_address @@ -30,13 +31,13 @@ pytestmark = pytest.mark.setup_client(pin=PIN4) @pytest.mark.setup_client(pin=None) -def test_no_protection(client): +def test_no_protection(client: Client): with client: client.set_expected_responses([messages.Address]) get_test_address(client) -def test_correct_pin(client): +def test_correct_pin(client: Client): with client: client.use_pin_sequence([PIN4]) # Expected responses differ between T1 and TT @@ -56,14 +57,14 @@ def test_correct_pin(client): @pytest.mark.skip_t2 -def test_incorrect_pin_t1(client): +def test_incorrect_pin_t1(client: Client): with pytest.raises(PinException): client.use_pin_sequence([BAD_PIN]) get_test_address(client) @pytest.mark.skip_t1 -def test_incorrect_pin_t2(client): +def test_incorrect_pin_t2(client: Client): with client: # After first incorrect attempt, TT will not raise an error, but instead ask for another attempt client.use_pin_sequence([BAD_PIN, PIN4]) @@ -85,7 +86,7 @@ def _check_backoff_time(attempts: int, start: float) -> None: @pytest.mark.skip_t2 -def test_exponential_backoff_t1(client): +def test_exponential_backoff_t1(client: Client): for attempt in range(3): start = time.time() with client, pytest.raises(PinException): @@ -95,7 +96,7 @@ def test_exponential_backoff_t1(client): @pytest.mark.skip_t1 -def test_exponential_backoff_t2(client): +def test_exponential_backoff_t2(client: Client): def input_flow(): """Inputting some bad PINs and finally the correct one""" yield # PIN entry diff --git a/tests/device_tests/test_protection_levels.py b/tests/device_tests/test_protection_levels.py index 9e0457750..2332d0262 100644 --- a/tests/device_tests/test_protection_levels.py +++ b/tests/device_tests/test_protection_levels.py @@ -17,6 +17,7 @@ import pytest from trezorlib import btc, device, messages, misc +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path @@ -36,7 +37,7 @@ PIN4 = "1234" pytestmark = pytest.mark.setup_client(pin=PIN4, passphrase=True) -def _pin_request(client): +def _pin_request(client: Client): """Get appropriate PIN request for each model""" if client.features.model == "1": return messages.PinMatrixRequest @@ -44,7 +45,9 @@ def _pin_request(client): return messages.ButtonRequest(code=B.PinEntry) -def _assert_protection(client, pin: bool = True, passphrase: bool = True) -> None: +def _assert_protection( + client: Client, pin: bool = True, passphrase: bool = True +) -> None: """Make sure PIN and passphrase protection have expected values""" with client: client.use_pin_sequence([PIN4]) @@ -54,7 +57,7 @@ def _assert_protection(client, pin: bool = True, passphrase: bool = True) -> Non client.clear_session() -def test_initialize(client): +def test_initialize(client: Client): _assert_protection(client) with client: client.set_expected_responses([messages.Features]) @@ -64,7 +67,7 @@ def test_initialize(client): @pytest.mark.skip_t1 @pytest.mark.setup_client(pin=PIN4) @pytest.mark.parametrize("passphrase", (True, False)) -def test_passphrase_reporting(client, passphrase): +def test_passphrase_reporting(client: Client, passphrase): """On TT, passphrase_protection is a private setting, so a locked device should report passphrase_protection=None. """ @@ -87,7 +90,7 @@ def test_passphrase_reporting(client, passphrase): assert client.features.passphrase_protection is None -def test_apply_settings(client): +def test_apply_settings(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4]) @@ -103,7 +106,7 @@ def test_apply_settings(client): @pytest.mark.skip_t2 -def test_change_pin_t1(client): +def test_change_pin_t1(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4, PIN4, PIN4]) @@ -121,7 +124,7 @@ def test_change_pin_t1(client): @pytest.mark.skip_t1 -def test_change_pin_t2(client): +def test_change_pin_t2(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4, PIN4, PIN4, PIN4]) @@ -141,7 +144,7 @@ def test_change_pin_t2(client): @pytest.mark.setup_client(pin=None, passphrase=False) -def test_ping(client): +def test_ping(client: Client): _assert_protection(client, pin=False, passphrase=False) with client: client.set_expected_responses([messages.ButtonRequest, messages.Success]) @@ -149,7 +152,7 @@ def test_ping(client): @pytest.mark.skip_t2 -def test_get_entropy_t1(client): +def test_get_entropy_t1(client: Client): _assert_protection(client) with client: client.set_expected_responses( @@ -162,7 +165,7 @@ def test_get_entropy_t1(client): @pytest.mark.skip_t1 -def test_get_entropy_t2(client): +def test_get_entropy_t2(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4]) @@ -176,7 +179,7 @@ def test_get_entropy_t2(client): misc.get_entropy(client, 10) -def test_get_public_key(client): +def test_get_public_key(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4]) @@ -190,7 +193,7 @@ def test_get_public_key(client): btc.get_public_node(client, []) -def test_get_address(client): +def test_get_address(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4]) @@ -204,7 +207,7 @@ def test_get_address(client): get_test_address(client) -def test_wipe_device(client): +def test_wipe_device(client: Client): _assert_protection(client) with client: client.set_expected_responses( @@ -215,7 +218,7 @@ def test_wipe_device(client): @pytest.mark.setup_client(uninitialized=True) @pytest.mark.skip_t2 -def test_reset_device(client): +def test_reset_device(client: Client): assert client.features.pin_protection is False assert client.features.passphrase_protection is False with client: @@ -244,7 +247,7 @@ def test_reset_device(client): @pytest.mark.setup_client(uninitialized=True) @pytest.mark.skip_t2 -def test_recovery_device(client): +def test_recovery_device(client: Client): assert client.features.pin_protection is False assert client.features.passphrase_protection is False client.use_mnemonic(MNEMONIC12) @@ -273,7 +276,7 @@ def test_recovery_device(client): ) -def test_sign_message(client): +def test_sign_message(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4]) @@ -287,12 +290,12 @@ def test_sign_message(client): ] ) btc.sign_message( - client, "Bitcoin", parse_path("44h/0h/0h/0/0"), "testing message" + client, "Bitcoin", parse_path("m/44h/0h/0h/0/0"), "testing message" ) @pytest.mark.skip_t2 -def test_verify_message_t1(client): +def test_verify_message_t1(client: Client): _assert_protection(client) with client: client.set_expected_responses( @@ -314,7 +317,7 @@ def test_verify_message_t1(client): @pytest.mark.skip_t1 -def test_verify_message_t2(client): +def test_verify_message_t2(client: Client): _assert_protection(client) with client: client.use_pin_sequence([PIN4]) @@ -337,20 +340,20 @@ def test_verify_message_t2(client): ) -def test_signtx(client): +def test_signtx(client: Client): # tx: d5f65ee80147b4bcc70b75e4bbf2d7382021b871bd8867ef8fa525ef50864882 # input 0: 0.0039 BTC inp1 = messages.TxInputType( - address_n=parse_path("44h/0h/0h/0/0"), - amount=390000, + address_n=parse_path("m/44h/0h/0h/0/0"), + amount=390_000, prev_hash=TXHASH_d5f65e, prev_index=0, ) out1 = messages.TxOutputType( address="1MJ2tj2ThBE62zXbBYA5ZaN3fdve5CPAz1", - amount=390000 - 10000, + amount=390_000 - 10_000, script_type=messages.OutputScriptType.PAYTOADDRESS, ) @@ -387,7 +390,7 @@ def test_signtx(client): @pytest.mark.setup_client(pin=PIN4, passphrase=False) -def test_unlocked(client): +def test_unlocked(client: Client): assert client.features.unlocked is False _assert_protection(client, passphrase=False) @@ -404,7 +407,7 @@ def test_unlocked(client): @pytest.mark.setup_client(pin=None, passphrase=True) -def test_passphrase_cached(client): +def test_passphrase_cached(client: Client): _assert_protection(client, pin=False) with client: client.set_expected_responses([messages.PassphraseRequest, messages.Address]) diff --git a/tests/device_tests/test_sdcard.py b/tests/device_tests/test_sdcard.py index 351dd295c..17c5b340a 100644 --- a/tests/device_tests/test_sdcard.py +++ b/tests/device_tests/test_sdcard.py @@ -17,6 +17,7 @@ import pytest from trezorlib import device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.messages import SdProtectOperationType as Op @@ -24,13 +25,13 @@ pytestmark = pytest.mark.skip_t1 @pytest.mark.sd_card(formatted=False) -def test_sd_format(client): +def test_sd_format(client: Client): device.sd_protect(client, Op.ENABLE) assert client.features.sd_protection is True @pytest.mark.sd_card(formatted=False) -def test_sd_no_format(client): +def test_sd_no_format(client: Client): def input_flow(): yield # enable SD protection? client.debug.press_yes() @@ -47,7 +48,7 @@ def test_sd_no_format(client): @pytest.mark.sd_card @pytest.mark.setup_client(pin="1234") -def test_sd_protect_unlock(client): +def test_sd_protect_unlock(client: Client): def input_flow_enable_sd_protect(): yield # Enter PIN to unlock device assert "PinDialog" == client.debug.wait_layout().text diff --git a/tests/device_tests/test_session.py b/tests/device_tests/test_session.py index 06726c7ee..03c91332e 100644 --- a/tests/device_tests/test_session.py +++ b/tests/device_tests/test_session.py @@ -18,19 +18,20 @@ import pytest from trezorlib import cardano, messages from trezorlib.btc import get_public_node +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import TrezorFailure from trezorlib.tools import parse_path from ..common import get_test_address -ADDRESS_N = parse_path("44'/0'/0'") +ADDRESS_N = parse_path("m/44h/0h/0h") XPUB = "xpub6BiVtCpG9fQPxnPmHXG8PhtzQdWC2Su4qWu6XW9tpWFYhxydCLJGrWBJZ5H6qTAHdPQ7pQhtpjiYZVZARo14qHiay2fvrX996oEP42u8wZy" PIN4 = "1234" @pytest.mark.setup_client(pin=PIN4, passphrase="") -def test_clear_session(client): +def test_clear_session(client: Client): is_trezor1 = client.features.model == "1" init_responses = [ messages.PinMatrixRequest if is_trezor1 else messages.ButtonRequest, @@ -63,7 +64,7 @@ def test_clear_session(client): assert get_public_node(client, ADDRESS_N).xpub == XPUB -def test_end_session(client): +def test_end_session(client: Client): # client instance starts out not initialized # XXX do we want to change this? assert client.session_id is not None @@ -93,7 +94,7 @@ def test_end_session(client): client.end_session() -def test_cannot_resume_ended_session(client): +def test_cannot_resume_ended_session(client: Client): session_id = client.session_id with client: client.set_expected_responses([messages.Features]) @@ -109,7 +110,7 @@ def test_cannot_resume_ended_session(client): assert session_id != client.session_id -def test_end_session_only_current(client): +def test_end_session_only_current(client: Client): """test that EndSession only destroys the current session""" session_id_a = client.session_id client.init_device(new_session=True) @@ -128,7 +129,7 @@ def test_end_session_only_current(client): @pytest.mark.setup_client(passphrase=True) -def test_session_recycling(client): +def test_session_recycling(client: Client): session_id_orig = client.session_id with client: client.set_expected_responses( @@ -159,7 +160,7 @@ def test_session_recycling(client): @pytest.mark.altcoin @pytest.mark.cardano @pytest.mark.skip_t1 -def test_derive_cardano_empty_session(client): +def test_derive_cardano_empty_session(client: Client): # start new session client.init_device(new_session=True) session_id = client.session_id @@ -178,7 +179,7 @@ def test_derive_cardano_empty_session(client): @pytest.mark.altcoin @pytest.mark.cardano @pytest.mark.skip_t1 -def test_derive_cardano_running_session(client): +def test_derive_cardano_running_session(client: Client): # start new session client.init_device(new_session=True) session_id = client.session_id diff --git a/tests/device_tests/test_session_id_and_passphrase.py b/tests/device_tests/test_session_id_and_passphrase.py index 5ab4795c5..80fd6bc30 100644 --- a/tests/device_tests/test_session_id_and_passphrase.py +++ b/tests/device_tests/test_session_id_and_passphrase.py @@ -19,6 +19,7 @@ import random import pytest from trezorlib import exceptions, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.messages import FailureType from trezorlib.tools import parse_path @@ -38,13 +39,13 @@ XPUB_PASSPHRASE_NONE = "xpub6BiVtCpG9fQPxnPmHXG8PhtzQdWC2Su4qWu6XW9tpWFYhxydCLJG XPUB_CARDANO_PASSPHRASE_A = "d37eba66d6183547b11b4d0c3e08e761da9f07c3ef32183f8b79360b2b66850e47e8eb3865251784c3c471a854ee40dfc067f7f3afe47d093388ea45239606fd" XPUB_CARDANO_PASSPHRASE_B = "d80e770f6dfc3edb58eaab68aa091b2c27b08a47583471e93437ac5f8baa61880c7af4938a941c084c19731e6e57a5710e6ad1196263291aea297ce0eec0f177" -ADDRESS_N = parse_path("44h/0h/0h") +ADDRESS_N = parse_path("m/44h/0h/0h") XPUB_REQUEST = messages.GetPublicKey(address_n=ADDRESS_N, coin_name="Bitcoin") SESSIONS_STORED = 10 -def _init_session(client, session_id=None, derive_cardano=False): +def _init_session(client: Client, session_id=None, derive_cardano=False): """Call Initialize, check and return the session ID.""" response = client.call( messages.Initialize(session_id=session_id, derive_cardano=derive_cardano) @@ -54,7 +55,7 @@ def _init_session(client, session_id=None, derive_cardano=False): return response.session_id -def _get_xpub(client, passphrase=None): +def _get_xpub(client: Client, passphrase=None): """Get XPUB and check that the appropriate passphrase flow has happened.""" if passphrase is not None: expected_responses = [ @@ -74,7 +75,7 @@ def _get_xpub(client, passphrase=None): @pytest.mark.setup_client(passphrase=True) -def test_session_with_passphrase(client): +def test_session_with_passphrase(client: Client): # Let's start the communication by calling Initialize. session_id = _init_session(client) @@ -101,7 +102,7 @@ def test_session_with_passphrase(client): @pytest.mark.setup_client(passphrase=True) -def test_multiple_sessions(client): +def test_multiple_sessions(client: Client): # start SESSIONS_STORED sessions session_ids = [] for _ in range(SESSIONS_STORED): @@ -140,7 +141,7 @@ def test_multiple_sessions(client): @pytest.mark.setup_client(passphrase=True) -def test_multiple_passphrases(client): +def test_multiple_passphrases(client: Client): # start a session session_a = _init_session(client) assert _get_xpub(client, passphrase="A") == XPUB_PASSPHRASES["A"] @@ -174,7 +175,7 @@ def test_multiple_passphrases(client): @pytest.mark.slow @pytest.mark.setup_client(passphrase=True) -def test_max_sessions_with_passphrases(client): +def test_max_sessions_with_passphrases(client: Client): # for the following tests, we are using as many passphrases as there are available sessions assert len(XPUB_PASSPHRASES) == SESSIONS_STORED @@ -214,7 +215,7 @@ def test_max_sessions_with_passphrases(client): _get_xpub(client, passphrase="whatever") # passphrase is prompted -def test_session_enable_passphrase(client): +def test_session_enable_passphrase(client: Client): # Let's start the communication by calling Initialize. session_id = _init_session(client) @@ -239,7 +240,7 @@ def test_session_enable_passphrase(client): @pytest.mark.skip_t1 @pytest.mark.setup_client(passphrase=True) -def test_passphrase_on_device(client): +def test_passphrase_on_device(client: Client): _init_session(client) # try to get xpub with passphrase on host: @@ -278,7 +279,7 @@ def test_passphrase_on_device(client): @pytest.mark.skip_t1 @pytest.mark.setup_client(passphrase=True) -def test_passphrase_always_on_device(client): +def test_passphrase_always_on_device(client: Client): # Let's start the communication by calling Initialize. session_id = _init_session(client) @@ -312,7 +313,7 @@ def test_passphrase_always_on_device(client): @pytest.mark.skip_t2 @pytest.mark.setup_client(passphrase="") -def test_passphrase_on_device_not_possible_on_t1(client): +def test_passphrase_on_device_not_possible_on_t1(client: Client): # This setting makes no sense on T1. response = client.call_raw(messages.ApplySettings(passphrase_always_on_device=True)) assert isinstance(response, messages.Failure) @@ -327,7 +328,7 @@ def test_passphrase_on_device_not_possible_on_t1(client): @pytest.mark.setup_client(passphrase=True) -def test_passphrase_ack_mismatch(client): +def test_passphrase_ack_mismatch(client: Client): response = client.call_raw(XPUB_REQUEST) assert isinstance(response, messages.PassphraseRequest) response = client.call_raw(messages.PassphraseAck(passphrase="A", on_device=True)) @@ -336,7 +337,7 @@ def test_passphrase_ack_mismatch(client): @pytest.mark.setup_client(passphrase="") -def test_passphrase_missing(client): +def test_passphrase_missing(client: Client): response = client.call_raw(XPUB_REQUEST) assert isinstance(response, messages.PassphraseRequest) response = client.call_raw(messages.PassphraseAck(passphrase=None)) @@ -351,7 +352,7 @@ def test_passphrase_missing(client): @pytest.mark.setup_client(passphrase=True) -def test_passphrase_length(client): +def test_passphrase_length(client: Client): def call(passphrase: str, expected_result: bool): _init_session(client) response = client.call_raw(XPUB_REQUEST) @@ -374,9 +375,9 @@ def test_passphrase_length(client): call(passphrase="A" * 49 + "ลก", expected_result=False) -def _get_xpub_cardano(client, passphrase): +def _get_xpub_cardano(client: Client, passphrase): msg = messages.CardanoGetPublicKey( - address_n=parse_path("44'/1815'/0'/0/0"), + address_n=parse_path("m/44h/1815h/0h/0/0"), derivation_type=messages.CardanoDerivationType.ICARUS, ) response = client.call_raw(msg) @@ -390,7 +391,7 @@ def _get_xpub_cardano(client, passphrase): @pytest.mark.skip_t1 @pytest.mark.altcoin @pytest.mark.setup_client(passphrase=True) -def test_cardano_passphrase(client): +def test_cardano_passphrase(client: Client): # Cardano has a separate derivation method that needs to access the plaintext # of the passphrase. # Historically, Cardano calls would ask for passphrase again. Now, they should not. diff --git a/tests/device_tests/tezos/test_getaddress.py b/tests/device_tests/tezos/test_getaddress.py index 508502e73..12c53fe31 100644 --- a/tests/device_tests/tezos/test_getaddress.py +++ b/tests/device_tests/tezos/test_getaddress.py @@ -16,6 +16,7 @@ import pytest +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tezos import get_address from trezorlib.tools import parse_path @@ -23,11 +24,11 @@ from trezorlib.tools import parse_path @pytest.mark.altcoin @pytest.mark.tezos @pytest.mark.skip_t1 -def test_tezos_get_address(client): - path = parse_path("m/44'/1729'/0'") +def test_tezos_get_address(client: Client): + path = parse_path("m/44h/1729h/0h") address = get_address(client, path, show_display=True) assert address == "tz1Kef7BSg6fo75jk37WkKRYSnJDs69KVqt9" - path = parse_path("m/44'/1729'/1'") + path = parse_path("m/44h/1729h/1h") address = get_address(client, path, show_display=True) assert address == "tz1ekQapZCX4AXxTJhJZhroDKDYLHDHegvm1" diff --git a/tests/device_tests/tezos/test_getpublickey.py b/tests/device_tests/tezos/test_getpublickey.py index dc378f2b6..afd39eb5a 100644 --- a/tests/device_tests/tezos/test_getpublickey.py +++ b/tests/device_tests/tezos/test_getpublickey.py @@ -16,6 +16,7 @@ import pytest +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.tezos import get_public_key from trezorlib.tools import parse_path @@ -23,11 +24,11 @@ from trezorlib.tools import parse_path @pytest.mark.altcoin @pytest.mark.tezos @pytest.mark.skip_t1 -def test_tezos_get_public_key(client): - path = parse_path("m/44'/1729'/0'") +def test_tezos_get_public_key(client: Client): + path = parse_path("m/44h/1729h/0h") pk = get_public_key(client, path) assert pk == "edpkttLhEbVfMC3DhyVVFzdwh8ncRnEWiLD1x8TAuPU7vSJak7RtBX" - path = parse_path("m/44'/1729'/1'") + path = parse_path("m/44h/1729h/1h") pk = get_public_key(client, path) assert pk == "edpkuTPqWjcApwyD3VdJhviKM5C13zGk8c4m87crgFarQboF3Mp56f" diff --git a/tests/device_tests/tezos/test_sign_tx.py b/tests/device_tests/tezos/test_sign_tx.py index ba9281638..30c13d6b7 100644 --- a/tests/device_tests/tezos/test_sign_tx.py +++ b/tests/device_tests/tezos/test_sign_tx.py @@ -17,12 +17,13 @@ import pytest from trezorlib import messages, tezos +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.protobuf import dict_to_proto from trezorlib.tools import parse_path -TEZOS_PATH = parse_path("m/44'/1729'/0'") -TEZOS_PATH_10 = parse_path("m/44'/1729'/10'") -TEZOS_PATH_15 = parse_path("m/44'/1729'/15'") +TEZOS_PATH = parse_path("m/44h/1729h/0h") +TEZOS_PATH_10 = parse_path("m/44h/1729h/10h") +TEZOS_PATH_15 = parse_path("m/44h/1729h/15h") pytestmark = [ pytest.mark.altcoin, @@ -31,7 +32,7 @@ pytestmark = [ ] -def test_tezos_sign_tx_proposal(client): +def test_tezos_sign_tx_proposal(client: Client): with client: resp = tezos.sign_tx( client, @@ -62,7 +63,7 @@ def test_tezos_sign_tx_proposal(client): assert resp.operation_hash == "opLqntFUu984M7LnGsFvfGW6kWe9QjAz4AfPDqQvwJ1wPM4Si4c" -def test_tezos_sign_tx_multiple_proposals(client): +def test_tezos_sign_tx_multiple_proposals(client: Client): with client: resp = tezos.sign_tx( client, @@ -94,7 +95,7 @@ def test_tezos_sign_tx_multiple_proposals(client): assert resp.operation_hash == "onobSyNgiitGXxSVFJN6949MhUomkkxvH4ZJ2owgWwNeDdntF9Y" -def test_tezos_sing_tx_ballot_yay(client): +def test_tezos_sing_tx_ballot_yay(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -118,7 +119,7 @@ def test_tezos_sing_tx_ballot_yay(client): ) -def test_tezos_sing_tx_ballot_nay(client): +def test_tezos_sing_tx_ballot_nay(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -141,7 +142,7 @@ def test_tezos_sing_tx_ballot_nay(client): ) -def test_tezos_sing_tx_ballot_pass(client): +def test_tezos_sing_tx_ballot_pass(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -165,7 +166,7 @@ def test_tezos_sing_tx_ballot_pass(client): ) -def test_tezos_sign_tx_tranasaction(client): +def test_tezos_sign_tx_tranasaction(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -199,7 +200,7 @@ def test_tezos_sign_tx_tranasaction(client): assert resp.operation_hash == "oon8PNUsPETGKzfESv1Epv4535rviGS7RdCfAEKcPvzojrcuufb" -def test_tezos_sign_tx_delegation(client): +def test_tezos_sign_tx_delegation(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_15, @@ -229,7 +230,7 @@ def test_tezos_sign_tx_delegation(client): assert resp.operation_hash == "op79C1tR7wkUgYNid2zC1WNXmGorS38mTXZwtAjmCQm2kG7XG59" -def test_tezos_sign_tx_origination(client): +def test_tezos_sign_tx_origination(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -260,7 +261,7 @@ def test_tezos_sign_tx_origination(client): assert resp.operation_hash == "onmq9FFZzvG2zghNdr1bgv9jzdbzNycXjSSNmCVhXCGSnV3WA9g" -def test_tezos_sign_tx_reveal(client): +def test_tezos_sign_tx_reveal(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH, @@ -302,7 +303,7 @@ def test_tezos_sign_tx_reveal(client): assert resp.operation_hash == "oo9JFiWTnTSvUZfajMNwQe1VyFN2pqwiJzZPkpSAGfGD57Z6mZJ" -def test_tezos_smart_contract_delegation(client): +def test_tezos_smart_contract_delegation(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -339,7 +340,7 @@ def test_tezos_smart_contract_delegation(client): assert resp.operation_hash == "oo75gfQGGPEPChXZzcPPAGtYqCpsg2BS5q9gmhrU3NQP7CEffpU" -def test_tezos_kt_remove_delegation(client): +def test_tezos_kt_remove_delegation(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -374,7 +375,7 @@ def test_tezos_kt_remove_delegation(client): assert resp.operation_hash == "ootMi1tXbfoVgFyzJa8iXyR4mnHd5TxLm9hmxVzMVRkbyVjKaHt" -def test_tezos_smart_contract_transfer(client): +def test_tezos_smart_contract_transfer(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, @@ -417,7 +418,7 @@ def test_tezos_smart_contract_transfer(client): assert resp.operation_hash == "ooRGGtCmoQDgB36XvQqmM7govc3yb77YDUoa7p2QS7on27wGRns" -def test_tezos_smart_contract_transfer_to_contract(client): +def test_tezos_smart_contract_transfer_to_contract(client: Client): resp = tezos.sign_tx( client, TEZOS_PATH_10, diff --git a/tests/device_tests/webauthn/test_msg_webauthn.py b/tests/device_tests/webauthn/test_msg_webauthn.py index b2409a347..7c02c27cf 100644 --- a/tests/device_tests/webauthn/test_msg_webauthn.py +++ b/tests/device_tests/webauthn/test_msg_webauthn.py @@ -17,6 +17,7 @@ import pytest from trezorlib import fido +from trezorlib.debuglink import TrezorClientDebugLink as Client from trezorlib.exceptions import Cancelled, TrezorFailure from ...common import MNEMONIC12 @@ -28,7 +29,7 @@ RK_CAPACITY = 100 @pytest.mark.skip_t1 @pytest.mark.altcoin @pytest.mark.setup_client(mnemonic=MNEMONIC12) -def test_add_remove(client): +def test_add_remove(client: Client): # Remove index 0 should fail. with pytest.raises(TrezorFailure): fido.remove_credential(client, 0) diff --git a/tests/device_tests/webauthn/test_u2f_counter.py b/tests/device_tests/webauthn/test_u2f_counter.py index 9d054c1cf..d99467f2b 100644 --- a/tests/device_tests/webauthn/test_u2f_counter.py +++ b/tests/device_tests/webauthn/test_u2f_counter.py @@ -17,10 +17,11 @@ import pytest from trezorlib import fido +from trezorlib.debuglink import TrezorClientDebugLink as Client @pytest.mark.altcoin -def test_u2f_counter(client): +def test_u2f_counter(client: Client): assert fido.get_next_counter(client) == 0 assert fido.get_next_counter(client) == 1 fido.set_counter(client, 111111) diff --git a/tests/persistence_tests/test_wipe_code.py b/tests/persistence_tests/test_wipe_code.py index a2e8e8cae..12c802406 100644 --- a/tests/persistence_tests/test_wipe_code.py +++ b/tests/persistence_tests/test_wipe_code.py @@ -1,4 +1,5 @@ from trezorlib import debuglink, device, messages +from trezorlib.debuglink import TrezorClientDebugLink as Client from ..common import MNEMONIC12 from ..emulators import EmulatorWrapper @@ -8,9 +9,7 @@ PIN = "1234" WIPE_CODE = "9876" -def setup_device_legacy( - client: debuglink.TrezorClientDebugLink, pin: str, wipe_code: str -) -> None: +def setup_device_legacy(client: Client, pin: str, wipe_code: str) -> None: device.wipe(client) debuglink.load_device( client, MNEMONIC12, pin, passphrase_protection=False, label="WIPECODE" @@ -21,9 +20,7 @@ def setup_device_legacy( device.change_wipe_code(client) -def setup_device_core( - client: debuglink.TrezorClientDebugLink, pin: str, wipe_code: str -) -> None: +def setup_device_core(client: Client, pin: str, wipe_code: str) -> None: device.wipe(client) debuglink.load_device( client, MNEMONIC12, pin, passphrase_protection=False, label="WIPECODE" diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 552af1f5a..17be445a9 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -1,6 +1,6 @@ { -"binance-test_get_address.py::test_binance_get_address[m-44'-714'-0'-0-0-bnb1hgm0p7khfk85zpz-22cd77fe": "a8acaff76064949f9b800493cb3c8a1fb56f206bda9a85a80fd008475d2a946b", -"binance-test_get_address.py::test_binance_get_address[m-44'-714'-0'-0-1-bnb1egswqkszzfc2uq7-a56ec987": "8b7387f0d82f78aa15f848a0995507db80f51416956d49ecd893ea49e7b64523", +"binance-test_get_address.py::test_binance_get_address[m-44h-714h-0h-0-0-bnb1hgm0p7khfk85zpz-68e2cb5a": "a8acaff76064949f9b800493cb3c8a1fb56f206bda9a85a80fd008475d2a946b", +"binance-test_get_address.py::test_binance_get_address[m-44h-714h-0h-0-1-bnb1egswqkszzfc2uq7-1adfb691": "8b7387f0d82f78aa15f848a0995507db80f51416956d49ecd893ea49e7b64523", "binance-test_get_public_key.py::test_binance_get_public_key": "3c69e84d0e572797271fac9265e3c6901a801eeaf25811884199e2b92691b48e", "binance-test_sign_tx.py::test_binance_sign_message[message0-expected_response0]": "fab7b62cab76ae2e4370d9ce113569b3aa2d089a5dbc365c8920731f756a4f37", "binance-test_sign_tx.py::test_binance_sign_message[message1-expected_response1]": "805fc5ef8074c3f5cfee5f7128c2cd068fef42f4f01f9450578f50e791ff811f", @@ -74,42 +74,42 @@ "bitcoin-test_getaddress_segwit.py::test_show_multisig_3": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_getaddress_segwit.py::test_show_segwit": "8fee331410c7b921ea9bca379bd8c626672e9a8f87e99eca3e8786b27a10814c", "bitcoin-test_getaddress_segwit.py::test_show_segwit_altcoin": "3f96d884fdd89a822ec356e72d138291f0cd6e895f2e51412c68b25ad7e0374a", -"bitcoin-test_getaddress_segwit_native.py::test_bip86[86'-0'-0'-0-0-bc1p5cyxnuxmeuwuvkwfem96-48709109": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_bip86[86'-0'-0'-0-1-bc1p4qhjn9zdvkux4e44uhx8-0c403a10": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_bip86[86'-0'-0'-1-0-bc1p3qkhfews2uk44qtvauqy-9a2499ab": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-0-0-bc1p5cyxnuxmeuwuvkwfem-dc12f29f": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-0-1-bc1p4qhjn9zdvkux4e44uh-1f521bf2": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_bip86[m-86h-0h-0h-1-0-bc1p3qkhfews2uk44qtvau-d8b57624": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_getaddress_segwit_native.py::test_multisig_missing[False]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_getaddress_segwit_native.py::test_multisig_missing[True]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_getaddress_segwit_native.py::test_show_multisig_3": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-84'-0'-0'-0-0-InputScrip-3253dff1": "6ed624858ce8f9e7a2c3eb3d3ea369caffb800e8f64a2a70320fbc901ab5fcde", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-84'-0'-0'-0-0-InputScrip-fc30785f": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-84'-0'-0'-1-0-InputScrip-0cff6236": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-84'-0'-0'-1-0-InputScrip-28f64a9c": "a021b0436b425f2b32923601fc4e79dbb1668ae7077cab5f8852fa0278334e19", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-86'-0'-0'-0-0-InputScrip-63b1a4f2": "1feb726b9675fb4024a5b2e6f9aefd6b045410397d019da11ad290db35aebe83", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-86'-0'-0'-0-0-InputScrip-b2ef8ab8": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-86'-0'-0'-1-0-InputScrip-d9f1da00": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-86'-0'-0'-1-0-InputScrip-fde0fbf7": "7e6a75fa5384e6117526b4154d63abcac0aca159a9a52e139965742b695dc6ac", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Elements-84'-1'-0'-0-0-InputScri-94be23b8": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Elements-84'-1'-0'-0-0-InputScri-a9768b32": "f780fae7616adf03f07144ef8d3482fa04cd0e744ec4502aa93cc0ec0877e61d", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-84'-1'-0'-0--0669bcb9": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-84'-1'-0'-0--77d89f20": "64f59da5388fd0673eb05bc0b2b3cfeb076097965fbc988fcaa81c91915c1f0f", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-84'-1'-0'-1--3c600c4b": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-84'-1'-0'-1--e4455d5d": "2957843eaeba3ae36ea426da5bacc2de81a6846bac4735526847a67badc828bc", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-86'-1'-0'-0--21458788": "50fa05990ef1d522a2e9c83411646731b84ae3102330ed640a8cee7146f9c1ab", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-86'-1'-0'-0--8b84ded1": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-84'-17'-0'-0-0-Input-4341fafb": "c5311f036fdb7d7cae9878b6161a4f3cae3b6a594bff9b1e2099455cd0bf3d28", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-84'-17'-0'-0-0-Input-de6d6142": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-84'-17'-0'-1-0-Input-ae18f26e": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-84'-17'-0'-1-0-Input-e60e4bd6": "077f918f68a3af307aa999b76a438abd378fde211ccbc231cf28632d6f4bccd3", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-86'-17'-0'-0-0-Input-37baffca": "e7f816f1d4e880e7ff64a8a7acb630d8040bce92e979a5646d060bd8659e4d6b", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-86'-17'-0'-0-0-Input-e4a648a0": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-84'-1'-0'-0-0-InputScrip-2ef3a6e1": "222d8057b5db530e7e5f1e1328c9049d2ccdc520f797cf02f8f578cdd53fb784", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-84'-1'-0'-0-0-InputScrip-6721c5e9": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-84'-1'-0'-1-0-InputScrip-5b6bca18": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-84'-1'-0'-1-0-InputScrip-9885119a": "cd275027373a9939bc0443381cfcd062c7edef26d817efbcc6f7cb1b17bd276d", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-86'-1'-0'-0-0-InputScrip-2cdd00d4": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-86'-1'-0'-0-0-InputScrip-84b1ac33": "378f798b332701decc0ab38583d84f4589027dfdcda34e93052ced5a88907233", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-86'-1'-0'-1-0-InputScrip-703856da": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-86'-1'-0'-1-0-InputScrip-7b2d3d39": "4460b43883e6049f719050ee015b01f6dd528c1aa51b96ae97c60230f56bbc7e", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-0-0-InputScr-6bc4ffc3": "6ed624858ce8f9e7a2c3eb3d3ea369caffb800e8f64a2a70320fbc901ab5fcde", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-0-0-InputScr-8943c1dc": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-1-0-InputScr-016718c1": "a021b0436b425f2b32923601fc4e79dbb1668ae7077cab5f8852fa0278334e19", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-84h-0h-0h-1-0-InputScr-7656a4db": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-0-0-InputScr-3d3cc8eb": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-0-0-InputScr-8571d5e0": "1feb726b9675fb4024a5b2e6f9aefd6b045410397d019da11ad290db35aebe83", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-1-0-InputScr-ab700de2": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Bitcoin-m-86h-0h-0h-1-0-InputScr-da3803e0": "7e6a75fa5384e6117526b4154d63abcac0aca159a9a52e139965742b695dc6ac", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Elements-m-84h-1h-0h-0-0-InputSc-490228be": "f780fae7616adf03f07144ef8d3482fa04cd0e744ec4502aa93cc0ec0877e61d", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Elements-m-84h-1h-0h-0-0-InputSc-ed587e90": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--40b95144": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--45b4ff5d": "64f59da5388fd0673eb05bc0b2b3cfeb076097965fbc988fcaa81c91915c1f0f", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--8f7c658b": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-84h-1h-0h--93c9c3ff": "2957843eaeba3ae36ea426da5bacc2de81a6846bac4735526847a67badc828bc", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-86h-1h-0h--5feb8c64": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin Testnet-m-86h-1h-0h--8d4476a1": "50fa05990ef1d522a2e9c83411646731b84ae3102330ed640a8cee7146f9c1ab", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-0-0-Inp-0200a67b": "c5311f036fdb7d7cae9878b6161a4f3cae3b6a594bff9b1e2099455cd0bf3d28", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-0-0-Inp-e6c1098a": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-1-0-Inp-9688a507": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-84h-17h-0h-1-0-Inp-f825f217": "077f918f68a3af307aa999b76a438abd378fde211ccbc231cf28632d6f4bccd3", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-86h-17h-0h-0-0-Inp-38cd93cf": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Groestlcoin-m-86h-17h-0h-0-0-Inp-ebecce6e": "e7f816f1d4e880e7ff64a8a7acb630d8040bce92e979a5646d060bd8659e4d6b", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-0-0-InputScr-313b9443": "222d8057b5db530e7e5f1e1328c9049d2ccdc520f797cf02f8f578cdd53fb784", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-0-0-InputScr-ce15ec92": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-1-0-InputScr-040186c0": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-84h-1h-0h-1-0-InputScr-b10918be": "cd275027373a9939bc0443381cfcd062c7edef26d817efbcc6f7cb1b17bd276d", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-0-0-InputScr-55ae0ae6": "378f798b332701decc0ab38583d84f4589027dfdcda34e93052ced5a88907233", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-0-0-InputScr-821a199d": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-1-0-InputScr-9d2fa8bc": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_getaddress_segwit_native.py::test_show_segwit[Testnet-m-86h-1h-0h-1-0-InputScr-d5b7f8fc": "4460b43883e6049f719050ee015b01f6dd528c1aa51b96ae97c60230f56bbc7e", "bitcoin-test_getaddress_show.py::test_show[m-44h-0h-12h-0-0-InputScriptType.SPENDADDRESS-1F-1e4f2f74": "1639a90cd9deccc25478b736c1992bd3f1ef17db95ab7e0ea82451dff0ebb12d", "bitcoin-test_getaddress_show.py::test_show[m-49h-0h-12h-0-0-InputScriptType.SPENDP2SHWITNES-a986211d": "a2b3af26697700980024d2d9ba1145925d9c3c9dea40f6cc3d4546ea94e6e913", "bitcoin-test_getaddress_show.py::test_show[m-84h-0h-12h-0-0-InputScriptType.SPENDWITNESS-bc-a5f08dfb": "c3258bfb300e27bb54aec51eaf68008e087191b97794ddb8a1e6ee650fd8a6b2", @@ -181,7 +181,7 @@ "bitcoin-test_multisig_change.py::test_multisig_mismatch_inputs": "bc207bc0016ad7e73a807ff6df12963f5d6e37b74421aed39d69e15b9d74d2be", "bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-6-255-script_types3]": "7914107977c576bdf24120466a7f6c4dccef31ee24bd8133657cc8310a89891b", "bitcoin-test_nonstandard_paths.py::test_getaddress[m-1195487518-script_types2]": "756a9cfc6b6c1c70859737ed1466d0495c0a0b148fb16f60e193e5b4784df66e", -"bitcoin-test_nonstandard_paths.py::test_getaddress[m-3'-100'-4-255-script_types1]": "b1f2a522eec51325ede3d518fc177e4ded3e15409aa5b1374067a05ab5a60bde", +"bitcoin-test_nonstandard_paths.py::test_getaddress[m-3h-100h-4-255-script_types1]": "b1f2a522eec51325ede3d518fc177e4ded3e15409aa5b1374067a05ab5a60bde", "bitcoin-test_nonstandard_paths.py::test_getaddress[m-4-255-script_types0]": "3e4e46dceddbb8ccb20dcacb2097db871309a9168ab7f2ba366253db5bf064f6", "bitcoin-test_nonstandard_paths.py::test_getaddress[m-49-0-63-0-255-script_types4]": "f3c95d5ac699c1d05fc7cbc9a21e49590b9c8cebcc938357e34c486caf92e790", "bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths0-address_index0]": "1488a078c45adbd36873a4a0d210f42075cd2b9fcbb5cb92313553a9e2805736", @@ -193,17 +193,17 @@ "bitcoin-test_nonstandard_paths.py::test_getaddress_multisig[paths6-address_index6]": "b6aea37192dddd33c4547d122c83e168c39aa2e54188a863b865aadaca42b4e9", "bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-1195487518-6-255-script_types3]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-1195487518-script_types2]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", -"bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-3'-100'-4-255-script_types1]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", +"bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-3h-100h-4-255-script_types1]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-4-255-script_types0]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_nonstandard_paths.py::test_getpublicnode[m-49-0-63-0-255-script_types4]": "c09de07fbbf1e047442180e2facb5482d06a1a428891b875b7dd93c9e4704ae1", "bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-6-255-script_types3]": "7ac64354602a89c0a47419e224db81a059dd103a66959c94789fd787dd4c69ee", "bitcoin-test_nonstandard_paths.py::test_signmessage[m-1195487518-script_types2]": "976f9c147269fc68beef182cd8efeb35422147f30fe24369b43021c1e68b9d8e", -"bitcoin-test_nonstandard_paths.py::test_signmessage[m-3'-100'-4-255-script_types1]": "4f73135d2ec9add695e0a22d855816558b4ba9329a2828f9c9930be6245bdc2d", +"bitcoin-test_nonstandard_paths.py::test_signmessage[m-3h-100h-4-255-script_types1]": "4f73135d2ec9add695e0a22d855816558b4ba9329a2828f9c9930be6245bdc2d", "bitcoin-test_nonstandard_paths.py::test_signmessage[m-4-255-script_types0]": "0988cc8bdc5879744bd33190fddc5b5aa137fdd7214abb003c8000a871d98f14", "bitcoin-test_nonstandard_paths.py::test_signmessage[m-49-0-63-0-255-script_types4]": "540df94c73a4eed8fe88cdb475e2b31df752dca9e47b102792c01064ee432752", "bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-6-255-script_types3]": "3fb1ec777c4c1a4e320740d050444077e118a0fbcfec96cb7e5ead203dfe01a2", "bitcoin-test_nonstandard_paths.py::test_signtx[m-1195487518-script_types2]": "e83d90183a5899d8881271e27ce030ec252df9c4a32ca4097cad811431553c37", -"bitcoin-test_nonstandard_paths.py::test_signtx[m-3'-100'-4-255-script_types1]": "efbe785820901471b0e55f9fd743c84a29fe719c2e1c8e6b2f87b0a20ce43cb2", +"bitcoin-test_nonstandard_paths.py::test_signtx[m-3h-100h-4-255-script_types1]": "efbe785820901471b0e55f9fd743c84a29fe719c2e1c8e6b2f87b0a20ce43cb2", "bitcoin-test_nonstandard_paths.py::test_signtx[m-4-255-script_types0]": "efbe785820901471b0e55f9fd743c84a29fe719c2e1c8e6b2f87b0a20ce43cb2", "bitcoin-test_nonstandard_paths.py::test_signtx[m-49-0-63-0-255-script_types4]": "4392475bb51d2dd9316036ed268ee84bafb6f3f7b0d2e1ab6be69a63775d5f66", "bitcoin-test_nonstandard_paths.py::test_signtx_multisig[paths0-address_index0]": "8a444c8c07335eed4cc8d6fa2f20d172b086102e339445856472dae23b4ac396",