def test_pointer_address(self): mnemonic = "test walk nut penalty hip pave soap entry language right filter choice" passphrase = "" node = bip32.from_mnemonic_cardano(mnemonic, passphrase) keychain = Keychain(node) test_vectors = [ # network id, pointer, expected result (network_ids.MAINNET, CardanoBlockchainPointerType(block_index=1, tx_index=2, certificate_index=3), "addr1gx2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzerspqgpse33frd" ), (network_ids.TESTNET, CardanoBlockchainPointerType(block_index=24157, tx_index=177, certificate_index=42), "addr_test1gz2fxv2umyhttkxyxp8x0dlpdt3k6cwng5pxj3jhsydzer5ph3wczvf2pfz4ly" ) ] for network_id, pointer, expected_address in test_vectors: address_parameters = CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], certificate_pointer=pointer, ) actual_address = derive_human_readable_address( keychain, address_parameters, protocol_magics.MAINNET, network_id) self.assertEqual(actual_address, expected_address)
def test_get(self): mnemonic = ( "test walk nut penalty hip pave soap entry language right filter choice" ) passphrase = "" node = bip32.from_mnemonic_cardano(mnemonic, passphrase) keychain = Keychain(node) expected_staking_use_cases = [ # address parameters, expected staking use case ( CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0 ], ), staking_use_cases.MATCH, ), ( CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 2 | HARDENED, 2, 0 ], ), staking_use_cases.MISMATCH, ), ( CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], staking_key_hash=unhexlify( "32c728d3861e164cab28cb8f006448139c8f1740ffb8e7aa9e5232dc" ), ), staking_use_cases.MATCH, ), ( CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], staking_key_hash=unhexlify( "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277" ), ), staking_use_cases.MISMATCH, ), ( CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], certificate_pointer=CardanoBlockchainPointerType( block_index=1, tx_index=2, certificate_index=3), ), staking_use_cases.POINTER_ADDRESS, ), ( CardanoAddressParametersType( address_type=CardanoAddressType.REWARD, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0 ], ), staking_use_cases.MATCH, ), ( CardanoAddressParametersType( address_type=CardanoAddressType.ENTERPRISE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], ), staking_use_cases.NO_STAKING, ), ( CardanoAddressParametersType( address_type=CardanoAddressType.BYRON, address_n=[ 44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], ), staking_use_cases.NO_STAKING, ), ] for address_parameters, expected_staking_use_case in expected_staking_use_cases: actual_staking_use_case = staking_use_cases.get( keychain, address_parameters) self.assertEqual(actual_staking_use_case, expected_staking_use_case)
def test_validate_address_parameters(self): test_vectors = [ # base address - both address_n_staking and staking_key_hash are None CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=None, staking_key_hash=None, ), # base address - both address_n_staking and staking_key_hash are set CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0 ], staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff" ), ), # base address - staking_key_hash is too short CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=None, staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8d"), ), # base address - address_n_staking is not a staking path CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], staking_key_hash=None, ), # base_script_key address - script_payment_hash is None CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_KEY, script_payment_hash=None, staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8d"), ), # base_script_key address - address_n_staking is not a staking path CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_KEY, script_payment_hash=unhexlify( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], ), # base_key_script address - script_staking_hash is None CardanoAddressParametersType( address_type=CardanoAddressType.BASE_KEY_SCRIPT, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], script_staking_hash=None, ), # base_script_script address - script_payment_hash is None CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_SCRIPT, script_payment_hash=None, script_staking_hash=unhexlify( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), # base_script_script address - script_staking and script_staking_hash are None CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_SCRIPT, script_payment_hash=unhexlify( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), script_staking_hash=None, ), # pointer address - pointer is None CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], certificate_pointer=None, ), # pointer_script address - pointer is None CardanoAddressParametersType( address_type=CardanoAddressType.POINTER_SCRIPT, script_payment_hash=unhexlify( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), certificate_pointer=None, ), # pointer_script address - script_payment_script is None CardanoAddressParametersType( address_type=CardanoAddressType.POINTER_SCRIPT, script_payment_hash=None, certificate_pointer=CardanoBlockchainPointerType( block_index=24157, tx_index=177, certificate_index=42), ), # enterprise_script address - script_payment_hash is None CardanoAddressParametersType( address_type=CardanoAddressType.ENTERPRISE_SCRIPT, script_payment_hash=None, ), # reward address - non staking path CardanoAddressParametersType( address_type=CardanoAddressType.REWARD, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ]), # reward_script address - script_staking_hash is None CardanoAddressParametersType( address_type=CardanoAddressType.REWARD_SCRIPT, script_staking_hash=None, ), # Shelley addresses with Byron namespace CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff" ), ), CardanoAddressParametersType( address_type=CardanoAddressType.BASE_KEY_SCRIPT, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], script_staking_hash=unhexlify( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], certificate_pointer=CardanoBlockchainPointerType( block_index=0, tx_index=0, certificate_index=0)), CardanoAddressParametersType( address_type=CardanoAddressType.ENTERPRISE, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], ), CardanoAddressParametersType( address_type=CardanoAddressType.REWARD, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], ), # Byron address with Shelley namespace CardanoAddressParametersType( address_type=CardanoAddressType.BYRON, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], ) ] for address_parameters in test_vectors: with self.assertRaises(wire.ProcessError): validate_address_parameters(address_parameters)
def test_derive_address(self): address_parameters = { "BASE": CardanoAddressParametersType(address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 4 | HARDENED, 0, 0 ], address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 4 | HARDENED, 2, 0 ]), "BASE_OWN_STAKING_KEY_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 4 | HARDENED, 0, 0 ], staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff") ), "BASE_OWN_STAKING_KEY_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 4 | HARDENED, 0, 0 ], staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff") ), # staking key hash not owned - derived with "all all..." mnenomnic "BASE_FOREIGN_STAKING_KEY_HASH_ACCOUNT_4": CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 4 | HARDENED, 0, 0 ], staking_key_hash=unhexlify( "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277") ), # staking key hash not owned - derived with "all all..." mnenomnic "BASE_FOREIGN_STAKING_KEY_HASH_ACCOUNT_0": CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], staking_key_hash=unhexlify( "122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277") ), "BASE_SCRIPT_KEY_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_KEY, address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0 ], script_payment_hash=unhexlify( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), ), "BASE_KEY_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.BASE_KEY_SCRIPT, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], script_staking_hash=unhexlify( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), "BASE_SCRIPT_SCRIPT_HASHES": CardanoAddressParametersType( address_type=CardanoAddressType.BASE_SCRIPT_SCRIPT, script_payment_hash=unhexlify( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), script_staking_hash=unhexlify( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), "POINTER1": CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], certificate_pointer=CardanoBlockchainPointerType( block_index=1, tx_index=2, certificate_index=3), ), "POINTER2": CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], certificate_pointer=CardanoBlockchainPointerType( block_index=24157, tx_index=177, certificate_index=42), ), "POINTER_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.POINTER_SCRIPT, certificate_pointer=CardanoBlockchainPointerType( block_index=24157, tx_index=177, certificate_index=42), script_payment_hash=unhexlify( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), ), "ENTERPRISE": CardanoAddressParametersType( address_type=CardanoAddressType.ENTERPRISE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], ), "ENTERPRISE_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.ENTERPRISE_SCRIPT, script_payment_hash=unhexlify( "0d5acbf6a1dfb0c8724e60df314987315ccbf78bb6c0f9b6f3d568fe" ), ), "REWARD": CardanoAddressParametersType( address_type=CardanoAddressType.REWARD, address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0 ], ), "REWARD_SCRIPT_HASH": CardanoAddressParametersType( address_type=CardanoAddressType.REWARD_SCRIPT, script_staking_hash=unhexlify( "8d7bebc7a58f1c7b5fb7c9391071ecd3b51b032695522f8c555343a9" ), ), } test_vectors = [ # base address (network_ids.MAINNET, CardanoAddressType.BASE, address_parameters["BASE"], "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wnrqua2vw243tmjfjt0h5wsru6appuz8c0pfd75ur7myyeqsx9990" ), (network_ids.TESTNET, CardanoAddressType.BASE, address_parameters["BASE"], "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wnrqua2vw243tmjfjt0h5wsru6appuz8c0pfd75ur7myyeqnsc9fs" ), # base address with staking key hash (network_ids.MAINNET, CardanoAddressType.BASE, address_parameters["BASE_OWN_STAKING_KEY_HASH"], "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hlsydc62k" ), (network_ids.TESTNET, CardanoAddressType.BASE, address_parameters["BASE_OWN_STAKING_KEY_HASH"], "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsmcs5wgus8qt4atk45lvt4xfxpjtwfhdmvchdf2m3u3hls8m96xf" ), (network_ids.MAINNET, CardanoAddressType.BASE, address_parameters["BASE_FOREIGN_STAKING_KEY_HASH_ACCOUNT_4"], "addr1q8v42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfms06skxl" ), (network_ids.MAINNET, CardanoAddressType.BASE, address_parameters["BASE_FOREIGN_STAKING_KEY_HASH_ACCOUNT_0"], "addr1qxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92sj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfmsl3s9zt" ), (network_ids.TESTNET, CardanoAddressType.BASE, address_parameters["BASE_FOREIGN_STAKING_KEY_HASH_ACCOUNT_4"], "addr_test1qrv42wjda8r6mpfj40d36znlgfdcqp7jtj03ah8skh6u8wsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfmsvvdk2q" ), # base_script_key address (network_ids.MAINNET, CardanoAddressType.BASE_SCRIPT_KEY, address_parameters["BASE_SCRIPT_KEY_SCRIPT_HASH"], "addr1zyx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3lsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfmsf42dkl" ), (network_ids.TESTNET, CardanoAddressType.BASE_SCRIPT_KEY, address_parameters["BASE_SCRIPT_KEY_SCRIPT_HASH"], "addr_test1zqx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3lsj922xhxkn6twlq2wn4q50q352annk3903tj00h45mgfms2rhd6q" ), # base_key_script address (network_ids.MAINNET, CardanoAddressType.BASE_KEY_SCRIPT, address_parameters["BASE_KEY_SCRIPT_HASH"], "addr1yxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z925d004u0fv0r3a4ld7f8yg8rmxnk5dsxf542ghcc42ngw5s8vnrtt" ), (network_ids.TESTNET, CardanoAddressType.BASE_KEY_SCRIPT, address_parameters["BASE_KEY_SCRIPT_HASH"], "addr_test1yzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z925d004u0fv0r3a4ld7f8yg8rmxnk5dsxf542ghcc42ngw5sy6wr85" ), # base_script_script address (network_ids.MAINNET, CardanoAddressType.BASE_SCRIPT_SCRIPT, address_parameters["BASE_SCRIPT_SCRIPT_HASHES"], "addr1xyx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3l5d004u0fv0r3a4ld7f8yg8rmxnk5dsxf542ghcc42ngw5s3gftll" ), (network_ids.TESTNET, CardanoAddressType.BASE_SCRIPT_SCRIPT, address_parameters["BASE_SCRIPT_SCRIPT_HASHES"], "addr_test1xqx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3l5d004u0fv0r3a4ld7f8yg8rmxnk5dsxf542ghcc42ngw5sj75tnq" ), # pointer address (network_ids.MAINNET, CardanoAddressType.POINTER, address_parameters["POINTER1"], "addr1gxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92spqgpsl97q83" ), (network_ids.TESTNET, CardanoAddressType.POINTER, address_parameters["POINTER2"], "addr_test1gzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z925ph3wczvf2ag2x9t" ), # pointer_script address (network_ids.MAINNET, CardanoAddressType.POINTER_SCRIPT, address_parameters["POINTER_SCRIPT_HASH"], "addr12yx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3l5ph3wczvf2zmd4yp" ), (network_ids.TESTNET, CardanoAddressType.POINTER_SCRIPT, address_parameters["POINTER_SCRIPT_HASH"], "addr_test12qx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3l5ph3wczvf2d4sugn" ), # enterprise address (network_ids.MAINNET, CardanoAddressType.ENTERPRISE, address_parameters["ENTERPRISE"], "addr1vxq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92su77c6m"), (network_ids.TESTNET, CardanoAddressType.ENTERPRISE, address_parameters["ENTERPRISE"], "addr_test1vzq0nckg3ekgzuqg7w5p9mvgnd9ym28qh5grlph8xd2z92s8k2y47" ), # enterprise_script address (network_ids.MAINNET, CardanoAddressType.ENTERPRISE_SCRIPT, address_parameters["ENTERPRISE_SCRIPT_HASH"], "addr1wyx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3lsqee7sp"), (network_ids.TESTNET, CardanoAddressType.ENTERPRISE_SCRIPT, address_parameters["ENTERPRISE_SCRIPT_HASH"], "addr_test1wqx44jlk580mpjrjfesd7v2fsuc4ejlh3wmvp7dk702k3lsm3dzly" ), # reward address (network_ids.MAINNET, CardanoAddressType.REWARD, address_parameters["REWARD"], "stake1uyfz49rtntfa9h0s98f6s28sg69weemgjhc4e8hm66d5yacalmqha"), (network_ids.TESTNET, CardanoAddressType.REWARD, address_parameters["REWARD"], "stake_test1uqfz49rtntfa9h0s98f6s28sg69weemgjhc4e8hm66d5yac643znq" ), # reward_script address (network_ids.MAINNET, CardanoAddressType.REWARD_SCRIPT, address_parameters["REWARD_SCRIPT_HASH"], "stake17xxhh6785k83c76lklynjyr3anfm2xcry624ytuv24f582gt5mad4"), (network_ids.TESTNET, CardanoAddressType.REWARD_SCRIPT, address_parameters["REWARD_SCRIPT_HASH"], "stake_test17zxhh6785k83c76lklynjyr3anfm2xcry624ytuv24f582gv73lfg" ), ] for network_id, address_type, address_parameters, expected_address in test_vectors: validate_address_parameters(address_parameters) actual_address = derive_human_readable_address( self.keychain, address_parameters, protocol_magics.MAINNET, network_id) self.assertEqual(actual_address, expected_address)
def test_validate_address_parameters(self): test_vectors = [ # base address - both address_n_staking and staking_key_hash are None CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=None, staking_key_hash=None, ), # base address - both address_n_staking and staking_key_hash are set CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 2, 0 ], staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff" ), ), # base address - staking_key_hash is too short CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=None, staking_key_hash=unhexlify( "1bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8d"), ), # base address - address_n_staking is not a staking path CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], address_n_staking=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], staking_key_hash=None, ), # pointer address - pointer is None CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], certificate_pointer=None, ), # reward address - non staking path CardanoAddressParametersType( address_type=CardanoAddressType.REWARD, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ]), # Shelley addresses with Byron namespace CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0]), CardanoAddressParametersType( address_type=CardanoAddressType.POINTER, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], certificate_pointer=CardanoBlockchainPointerType( block_index=0, tx_index=0, certificate_index=0)), CardanoAddressParametersType( address_type=CardanoAddressType.ENTERPRISE, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], ), CardanoAddressParametersType( address_type=CardanoAddressType.REWARD, address_n=[44 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0], ), # Byron address with Shelley namespace CardanoAddressParametersType( address_type=CardanoAddressType.BYRON, address_n=[ 1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0 ], ) ] for address_parameters in test_vectors: with self.assertRaises(wire.ProcessError): validate_address_parameters(address_parameters)
from common import * from apps.cardano.helpers.credential import Credential from apps.common.paths import HARDENED from trezor.enums import CardanoAddressType from trezor.messages import CardanoAddressParametersType, CardanoBlockchainPointerType CERTIFICATE_POINTER = CardanoBlockchainPointerType( block_index=24157, tx_index=177, certificate_index=42, ) def _create_flags( is_reward: bool = False, is_no_staking: bool = False, is_mismatch: bool = False, is_unusual_path: bool = False, is_other_warning: bool = False, ) -> tuple[bool, ...]: return (is_reward, is_no_staking, is_mismatch, is_unusual_path, is_other_warning) ADDRESS_PARAMETERS_CASES = [ # base ( CardanoAddressParametersType( address_type=CardanoAddressType.BASE, address_n=[1852 | HARDENED, 1815 | HARDENED, 0 | HARDENED, 0, 0],