From d562254c2195d688ca59296f048ed905047317fe Mon Sep 17 00:00:00 2001 From: Tomas Krnak Date: Tue, 27 Dec 2022 17:07:52 +0700 Subject: [PATCH] test(device_tests): remake Zcash sign shielded tx tests --- .../zcash/test_sign_shielded_tx.py | 706 +++++++++++++++--- 1 file changed, 597 insertions(+), 109 deletions(-) diff --git a/tests/device_tests/zcash/test_sign_shielded_tx.py b/tests/device_tests/zcash/test_sign_shielded_tx.py index bebc1c2b1..ed902923e 100644 --- a/tests/device_tests/zcash/test_sign_shielded_tx.py +++ b/tests/device_tests/zcash/test_sign_shielded_tx.py @@ -30,13 +30,13 @@ from trezorlib.messages import ( ZcashOrchardInput, ZcashOrchardOutput, ZcashSignatureType, + Failure, + FailureType, ) from trezorlib.tools import parse_path from ..bitcoin.signtx import request_finished, request_input, request_output -# from ..bitcoin.signtx import request_finished, request_input, request_output - B = messages.ButtonRequestType @@ -58,62 +58,103 @@ def request_no_op(): return TxRequest(request_type=T.NO_OP) -def test_z2t(client: Client) -> None: - t_out_0 = TxOutputType( +def test_t2z(client: Client) -> None: + inp_0 = TxInputType( address_n=parse_path("m/44h/1h/0h/0/0"), - amount=990000, - script_type=OutputScriptType.PAYTOADDRESS, + amount=1000000, + prev_hash=bytes.fromhex("de0566f96c08e1d6efe753fe5940e48f7334f3d2af664818df358ff01c626f31"), + prev_index=0, ) - # note a86810a5b052fb69b3c76887f381241cea060017314e9a9418876e02cda63c03 - o_inp_0 = ZcashOrchardInput( - recipient=bytes.fromhex( - "160618e7e57eb29bfc1182108a933ae1dbf8ccc148d3cfa6c0a15a04de09e3c8844cd07be822332eaa2900" - ), - value=1000000, - rho=bytes.fromhex( - "bd6361c35b8363554f9c0b3612e67f4c65beae3aa71305e84d3827137497563d" - ), - rseed=bytes.fromhex( - "5c7ea612f6f66f50f961d7c98c2c60f3d0223c4ad6bdb876a3b8225bce526361" - ), + out_0 = ZcashOrchardOutput( + address=None, + amount=990000, + memo=None, ) + anchor = bytes.fromhex("91513dfdbb4453c947bca9d704c3284ce40378e8732b250e9ff2386efb7e493c") + expected_shielding_seed = bytes.fromhex("663cac8eba02d5493e0c025e59147024290eaea1bf3b13fd73028576d8becfb2") + expected_sighash = bytes.fromhex("317b60bdf6fa25e33c028c52cfa87a564f07375da69486d7946410b19c97847b") + expected_serialized_tx = bytes.fromhex("050000800a27a726b4d0d6c2000000000000000001316f621cf08f35df184866afd2f334738fe44059fe53e7efd6e1086cf96605de000000006b483045022100c14c55fd9ec6f878318a9c190051bae369ee47146f73b401a95a3f1a9ce4419f02202156b592c8f25f454e780a79d5f1473e7c3a9254883690b0101ab0685a6d7c810121030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0ffffffff00000002") - anchor = bytes.fromhex( - "a6e3b9c237886caa6ca8614428dc9a0ca5e2e54691c68f682348a41f489abf1f" - ) - expected_shielding_seed = bytes.fromhex( - "a3db28e1855c5bd8670f234150ea4d8f2d22a97662e5e3cf765aa6abf5b5579e" - ) - expected_sighash = bytes.fromhex( - "791f8985d5c21e9738b4556274109aa1a468f57079d8cd1b3ae83bac371eabfd" + with client: + client.set_expected_responses( + [ + request_input(0), + request_orchard_output(0), + ButtonRequest(code=B.SignTx), + request_no_op(), # shielding seed + request_orchard_output(0), + request_input(0), + request_finished(), # t-signature 0 + ] + ) + + protocol = zcash.sign_tx( + client, + inputs=[inp_0], + outputs=[out_0], + coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, + ) + + shielding_seed = next(protocol) + assert shielding_seed == expected_shielding_seed + sighash = next(protocol) + assert sighash == expected_sighash + signatures, serialized_tx = next(protocol) + assert serialized_tx == expected_serialized_tx + assert signatures == { + ZcashSignatureType.TRANSPARENT: [ + bytes.fromhex("3045022100c14c55fd9ec6f878318a9c190051bae369ee47146f73b401a95a3f1a9ce4419f02202156b592c8f25f454e780a79d5f1473e7c3a9254883690b0101ab0685a6d7c81"), + ], + ZcashSignatureType.ORCHARD_SPEND_AUTH: {}, + } + + # Accepted by network as ccc0f99a8c9761aca546abbb8284686921b5511c53c68099c73353828319a14f + + +def test_long_memo(client: Client) -> None: + # note e9410c3c645f1cf729207af23f2fc7e49e9397a714beb0a2c4fe32e759e95b07 + inp_0 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("d46832bcfa437ba67525eccc55cc08a39c89498665554b80b88cc80a882f1f1e"), + rseed=bytes.fromhex("c3de2d16a05cb9e8522f50f5c3bb189d8e28f04f78561d2fe1e7c9e16a6ce048"), ) - expected_serialized_tx = bytes.fromhex( - "050000800a27a726b4d0d6c200000000000000000001301b0f00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac000002" + + out_0 = ZcashOrchardOutput( + address="utest1xt8k2akcdnncjfz8sfxkm49quc4w627skp3qpggkwp8c8ay3htftjf7tur9kftcw0w4vu4scwfg93ckfag84khy9k40yanl5k0qkanh9cyhddgws786qeqn37rtyf6rx4eflz09zk06", + amount=990000, + memo="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Enim tortor at auctor urna nunc. Urna porttitor rhoncus dolor purus non enim praesent elementum facilisis. Amet purus gravida quis blandit turpis cursus in hac. Eu non diam phasellus vestibulum lorem sed risus. Pellentesque elit ullamcorper dignissim cras tincidunt. Egestas purus viverra accumsan in nisl nisi scelerisque eu ultrices. Morbi tincidunt ornare massa eget egestas purus.", ) + anchor = bytes.fromhex("91513dfdbb4453c947bca9d704c3284ce40378e8732b250e9ff2386efb7e493c") + expected_shielding_seed = bytes.fromhex("1ab3209792a5f2c578d542c4e173dc5d41a2574a944c4fc1cbef3160eb3c91c5") + expected_sighash = bytes.fromhex("5be775dd3eb9f994312a6c150bb7fa40d1a453b35442a4722573a2806c97ae53") + expected_serialized_tx = bytes.fromhex("050000800a27a726b4d0d6c200000000000000000000000002") with client: client.set_expected_responses( [ request_orchard_input(0), - request_output(0), + request_orchard_output(0), + ButtonRequest(code=B.ConfirmOutput), ButtonRequest(code=B.SignTx), request_no_op(), # shielding seed + request_orchard_output(0), request_orchard_input(0), - request_output(0), - request_finished(), # returns o-signature of o-input 0 in action 0 + request_finished(), # returns o-signature of o-input 0 in action 1 ] ) protocol = zcash.sign_tx( client, - t_inputs=[], - t_outputs=[t_out_0], - o_inputs=[o_inp_0], - o_outputs=[], - anchor=anchor, + inputs=[inp_0], + outputs=[out_0], coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, ) - + shielding_seed = next(protocol) assert shielding_seed == expected_shielding_seed sighash = next(protocol) @@ -123,72 +164,322 @@ def test_z2t(client: Client) -> None: assert signatures == { ZcashSignatureType.TRANSPARENT: [], ZcashSignatureType.ORCHARD_SPEND_AUTH: { - 0: bytes.fromhex( - "6a5b6db66413490272cdcc55efca8c2d85ce493fa46a3624675e9760f78f98206761087f847266839c9d9534a5e39cedb90e628ee48c7fdc88089faf692ab42e" - ), + 1: bytes.fromhex("17c320df8c72b1f4cacdb075a4e52cf52a7ee41ff0568019269981c4dc3a3d84828321e25c60d1ac3d014f559c623e46e8bbd839f165d9f236aac09f0b51101a"), }, } - # Accepted by network as fdab1e37ac3be83a1bcdd87970f568a4a19a10746255b438971ec2d585891f79 - # link: https://sochain.com/tx/ZECTEST/fdab1e37ac3be83a1bcdd87970f568a4a19a10746255b438971ec2d585891f79 + # Accepted by network as 53ae976c80a2732572a44254b353a4d140fab70b156c2a3194f9b93edd75e75b -def test_z2z(client: Client) -> None: - # note 8eb09c03fcddd0011fcbeee17518d378f02c3be3cbf210c69fbae5c111da0e16 - o_inp_0 = ZcashOrchardInput( - recipient=bytes.fromhex( - "160618e7e57eb29bfc1182108a933ae1dbf8ccc148d3cfa6c0a15a04de09e3c8844cd07be822332eaa2900" - ), +def test_too_large_fee(client: Client) -> None: + # note 3e44e6ed97e6a54299030fcc40be7f8b8135aad1e78c9de6af08b29a0fc79125 + inp_0 = ZcashOrchardInput( + recipient=bytes.fromhex("e170dd1fa4e66e16058c912f073813435edf5204074c2f2972719ff48bdba64ca637b5519bd493dfcbb40c"), value=1000000, - rho=bytes.fromhex( - "3bf2d24afd84071efbbf3175afba9971cc8aa21ea1da5629379e2d51b39aeb28" - ), - rseed=bytes.fromhex( - "74e4ab56513d4587d716d864a9c6e05b289e67c16096a6a4df8737d8253f442d" - ), + rho=bytes.fromhex("2d09ea3e03858fd48708abc9fde62d2519a671761400a1ae31f6151228c87d1a"), + rseed=bytes.fromhex("e76bfafc8e2c660f7bf5af81c58f83648dd32b1bfc4d023390f59bad94899bb9"), + ) + + # note 17fd7fed11398c39ad54c5945764a1347249be752faf9426b50349125d55ba37 + inp_1 = ZcashOrchardInput( + recipient=bytes.fromhex("3c16ab10809ca0c0164594ce7801e66a45b54993a153ce300594b17a83fe9528279856a906448ea41b6131"), + value=1000000, + rho=bytes.fromhex("8f3b7bac88aa1e7c1c320ad3ba56f5ff34f6cbbe716fe4a33a07a1d86181411b"), + rseed=bytes.fromhex("cd51c1027ca0f2b3e6dda6ddfac93a807afd8e944b62fd2bb34fcbc330626527"), + ) + + out_0 = ZcashOrchardOutput( + address="utest1xt8k2akcdnncjfz8sfxkm49quc4w627skp3qpggkwp8c8ay3htftjf7tur9kftcw0w4vu4scwfg93ckfag84khy9k40yanl5k0qkanh9cyhddgws786qeqn37rtyf6rx4eflz09zk06", + amount=990000, + memo="too large fee", ) + anchor = bytes.fromhex("880cb7d585cabeea07823afafd438008ab652f17b025147d001ca76c6f6ed420") - o_out_0 = ZcashOrchardOutput( + with client: + client.set_expected_responses( + [ + request_orchard_input(0), + request_orchard_input(1), + request_orchard_output(0), + ButtonRequest(code=B.ConfirmOutput), + Failure, + ] + ) + + with pytest.raises(TrezorFailure, match="DataError"): + protocol = zcash.sign_tx( + client, + inputs=[inp_0, inp_1], + outputs=[out_0], + coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, + ) + next(protocol) # shielding seed + next(protocol) # sighash + next(protocol) # serialized_tx and signatures + + +def test_too_long_memo(client: Client) -> None: + # note 521d740a5ac69a05871f5f267bf3d9d949dc190df55244d5c69f7f3a34ddf01f + inp_0 = ZcashOrchardInput( + recipient=bytes.fromhex("60fd17f3e0ada9aa1ec7f1b5d08c36e28fbf2bca109f78c4979ab2509c31bfced5d67e0bfda4143c870faa"), + value=1000000, + rho=bytes.fromhex("fb344f691582bc8126ed35ed7fd2eb67d826f85c2f6153c4596d7931c6a9ca08"), + rseed=bytes.fromhex("c13b948c75fabcb9d2d89c98f41f836bcf307788910ee926ad468ff99215db23"), + ) + + out_0 = ZcashOrchardOutput( + address="utest1xt8k2akcdnncjfz8sfxkm49quc4w627skp3qpggkwp8c8ay3htftjf7tur9kftcw0w4vu4scwfg93ckfag84khy9k40yanl5k0qkanh9cyhddgws786qeqn37rtyf6rx4eflz09zk06", + amount=990000, + memo="this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo hash 513 bytes this memo has", + ) + anchor = bytes.fromhex("880cb7d585cabeea07823afafd438008ab652f17b025147d001ca76c6f6ed420") + + with client: + client.set_expected_responses( + [ + request_orchard_input(0), + request_orchard_output(0), + Failure, + ] + ) + + with pytest.raises(TrezorFailure, match="DataError"): + protocol = zcash.sign_tx( + client, + inputs=[inp_0], + outputs=[out_0], + coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, + ) + next(protocol) # shielding seed + next(protocol) # sighash + next(protocol) # serialized_tx and signatures + + +def test_z2z(client: Client) -> None: + # note 59edab53df258314c1439b13348de6f48d8a7e5f46433aeaa69cee09345ce81e + inp_0 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("fe73c10f9f39bbb651484512b574e7f82f46661aef6968c1de652aa0887b3339"), + rseed=bytes.fromhex("8da24dc5800d366d6708871016189cb641367be404765b32be4e666fec6c7d5f"), + ) + + out_0 = ZcashOrchardOutput( address=None, amount=990000, memo=None, ) - anchor = bytes.fromhex( - "a6e3b9c237886caa6ca8614428dc9a0ca5e2e54691c68f682348a41f489abf1f" + anchor = bytes.fromhex("91513dfdbb4453c947bca9d704c3284ce40378e8732b250e9ff2386efb7e493c") + expected_shielding_seed = bytes.fromhex("fb6715646149cf6e239908fd40ebb7c183aa87c62113848b63fb31411d4eb44e") + expected_sighash = bytes.fromhex("6e678883fc87503ab9a7c8a7adc4c777920683f19cd1d29c5dbdd839acbc6d5d") + expected_serialized_tx = bytes.fromhex("050000800a27a726b4d0d6c200000000000000000000000002") + + with client: + client.set_expected_responses( + [ + request_orchard_input(0), + request_orchard_output(0), + ButtonRequest(code=B.SignTx), + request_no_op(), # shielding seed + request_orchard_output(0), + request_orchard_input(0), + request_finished(), # returns o-signature of o-input 0 in action 1 + ] + ) + + protocol = zcash.sign_tx( + client, + inputs=[inp_0], + outputs=[out_0], + coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, + ) + + shielding_seed = next(protocol) + assert shielding_seed == expected_shielding_seed + sighash = next(protocol) + assert sighash == expected_sighash + signatures, serialized_tx = next(protocol) + assert serialized_tx == expected_serialized_tx + assert signatures == { + ZcashSignatureType.TRANSPARENT: [], + ZcashSignatureType.ORCHARD_SPEND_AUTH: { + 1: bytes.fromhex("01d2a88613ab48043e4ee8b36bbf3b4e2a7aded067893738761831a5c2275b83f5c9ee8515a77d3a9afa0c54c63b7f8c51df5318090bf583c3898ecdefaff80a"), + }, + } + + # Accepted by network as 5d6dbcac39d8bd5d9cd2d19cf183069277c7c4ada7c8a7b93a5087fc8388676e + + +def test_dust_inputs(client: Client) -> None: + # note d31b775654587b067aab9aeb80a6ca386ea3565ab40d7e8cfffe0ee00cd8ef2e + inp_0 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("8691c0292a9af2cee37e5e5d08ceac9712bd382ec918cee1a541c65b8c835b11"), + rseed=bytes.fromhex("3136581d4003c4da40cc790f7d3f1918c6a09dc6a2fc6b77803bc4215501ec4f"), + ) + + # note 910e84948ed70ea5836790e95da310a66cd6bf8c7f60c187a92bce414c4dc704 + inp_1 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("8f4571edfa70084c22c0b37d7adcc9da8f7b5945e4f943b25eca6b9c01d65f3c"), + rseed=bytes.fromhex("9b9ec6d3f7339628a63f2f2dbf2c3540466ca4d242c8e882e64a139c6035a4e2"), ) - expected_shielding_seed = bytes.fromhex( - "e14ee85dac66bbc5dbc0e8cf9a73a5b5feba978dc8c96a7d8d83af971b43f943" + + # note bcdfef4b79a8f424c1a8f02859c72eb2af5f1c14925ffbd1824c7c947ec16d1f + inp_2 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("29cb975a0fde20da2e4411d18e09080d5f95843c61409d63cdc2c107667fc222"), + rseed=bytes.fromhex("e7fce58cafacd9e263d75b4bc7fba7666cc170a3c1b80d6a40c6588434c30dc5"), + ) + + # note f4b3dc901d26e355a6ede302257e56531ded7ca0cc88ae2ebb0c66195bff8c2f + inp_3 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("06ec68d839c3d174d065f51deea1740a7584fe2a3b5a6d4b09612fcbb99e3e2a"), + rseed=bytes.fromhex("337f31ad99053ba832e9ea4553d479815ccfeea6d89b75fe845eb48b1f778564"), ) - expected_sighash = bytes.fromhex( - "8b7a1b8bcae057c9389a7743d05e3ac45fd4088b1f4f34427903eae140f13196" + + # note 8d267d67f8f3cf2513cf0f5704ffdbfdebea13ec855d711e92e2fe0c2f493009 + inp_4 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("7b559c4434eceb4f02e8588297a22c54b3e20899a4efba6e10c537191a8a0007"), + rseed=bytes.fromhex("58e3bbc14e2a1b1cbdfeb655c37dc2a8d7fad20dcb738cde14e1a259586252c9"), ) - expected_serialized_tx = bytes.fromhex( - "050000800a27a726b4d0d6c200000000000000000000000002" + + # note d1db87af77c8c3d30dd7c7a14c8b6cce47303199124c9bcbbf99fad790609225 + inp_5 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("aa30929cc959b18ffdf5c9ccbb3147658724b544426d008b62c2a095db9a5923"), + rseed=bytes.fromhex("a193a9812117e264152b15bff4ab67a4d77ff051733f5aacf05a1b0a6b8f4667"), + ) + + # note 4d82ae84eb35ca1f1dde94dbef4e1c81610a4b8fac3b93e9e2d0018204787826 + inp_6 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("b05557518d6e3a75a46cf5660b00959e0da5411cfceecfa9b57d3337483c6830"), + rseed=bytes.fromhex("37916b09f61734ef9157cdc5cf427592bdc1566fc6135e9b2ea21fc3a14b0d7b"), + ) + + # note 4b5728ee631d893d12800a4543f70b5b2cd5976d8f8849ae22ee7e158d93b502 + inp_7 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("0c708f65e796eaaa94a3d94952be42a6bc721926dee260109dccde785156550e"), + rseed=bytes.fromhex("bcf667423aaf2fd58c808039352fe6dcc0b3aa0360b5f80c255ffc78f628c1c9"), + ) + + # note a283d518363808f68bc237d7f94bcdfd4dcab85a2ce879e81aac40b342f5d512 + inp_8 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("c3b688ea8c17bb403d00384881e612cd4a958d84e643c8b460497305c043912d"), + rseed=bytes.fromhex("51c3ed91f9ba9860eead7e3b254b03d911c65259d2a930143d1e912d43a5b6f9"), ) + + # note e06f775baf3f339f633dbfd0058d6e4298cf63f5c4acb3ddaf734b8d71dae03f + inp_9 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("7814a9ab7072b04a3f3b92478a4ffd4166aa453aaac15212b8b79faa98a0c905"), + rseed=bytes.fromhex("d5351c4545b8c155bf9a6358201937e0cc188781180506f242542f1c712e5565"), + ) + + # note 59588bdb579fa64473bec97364ab4c24a3ded7f785d7179f2c5d72d44120ac39 + inp_10 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("beeece26e589c9e394b89f1bcd962121c8b4799d13d54bf32b0823c7859fb33e"), + rseed=bytes.fromhex("9ca1c83fed55891f64829ec821365498c2bf466bf0ea29ed3e4f882ea1deb201"), + ) + + # note 070060ac1eb6d8068c7f3c82cc946f6f1b978ce9470ec28d043348c80aeacb2d + inp_11 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("d45196d3f9c5b236874093f3a0ca953cb508c3877d4f6ce759d3ee0c3554502e"), + rseed=bytes.fromhex("6ab596c96733e52bcaffbfdc52f41e7f00ebd22710878307ff4fcc16226810b9"), + ) + + out_0 = ZcashOrchardOutput( + address="utest1rusrelt7xyc62chav9r6cv5nnxp63eemm3rm0qpaqs578hkjpr9rgyvuyjm3nxpcjfx8a7dquyt2shkw5xl23m523t3cgkt7wsd9mue3", + amount=11990000, + memo="dust inputs", + ) + anchor = bytes.fromhex("91513dfdbb4453c947bca9d704c3284ce40378e8732b250e9ff2386efb7e493c") + expected_shielding_seed = bytes.fromhex("17bdeea7f310d97df991a94a5292c3f19c92b1f77c2941927ddc15fbbbfbe7d9") + expected_sighash = bytes.fromhex("1dfba8b01f871a258a8523cc79136b72c84d626e2dfca11b10ba96f065f4a1b9") + expected_serialized_tx = bytes.fromhex("050000800a27a726b4d0d6c20000000000000000000000000c") with client: client.set_expected_responses( [ + ButtonRequest(code=B.Warning), request_orchard_input(0), + request_orchard_input(1), + request_orchard_input(2), + request_orchard_input(3), + request_orchard_input(4), + request_orchard_input(5), + request_orchard_input(6), + request_orchard_input(7), + request_orchard_input(8), + request_orchard_input(9), + request_orchard_input(10), + request_orchard_input(11), request_orchard_output(0), + ButtonRequest(code=B.ConfirmOutput), ButtonRequest(code=B.SignTx), request_no_op(), # shielding seed + request_orchard_input(6), + request_orchard_input(5), + request_orchard_input(8), + request_orchard_input(4), + request_orchard_input(1), + request_orchard_input(11), + request_orchard_input(2), request_orchard_input(0), + request_orchard_input(10), + request_orchard_input(3), request_orchard_output(0), - request_finished(), # returns o-signature of o-input 0 in action 0 + request_orchard_input(9), + request_orchard_input(7), + request_no_op(), # returns o-signature of o-input 6 in action 0 + request_no_op(), # returns o-signature of o-input 5 in action 1 + request_no_op(), # returns o-signature of o-input 8 in action 2 + request_no_op(), # returns o-signature of o-input 4 in action 3 + request_no_op(), # returns o-signature of o-input 1 in action 4 + request_no_op(), # returns o-signature of o-input 11 in action 5 + request_no_op(), # returns o-signature of o-input 2 in action 6 + request_no_op(), # returns o-signature of o-input 0 in action 7 + request_no_op(), # returns o-signature of o-input 10 in action 8 + request_no_op(), # returns o-signature of o-input 3 in action 9 + request_no_op(), # returns o-signature of o-input 9 in action 10 + request_finished(), # returns o-signature of o-input 7 in action 11 ] ) protocol = zcash.sign_tx( client, - t_inputs=[], - t_outputs=[], - o_inputs=[o_inp_0], - o_outputs=[o_out_0], - anchor=anchor, + inputs=[inp_0, inp_1, inp_2, inp_3, inp_4, inp_5, inp_6, inp_7, inp_8, inp_9, inp_10, inp_11], + outputs=[out_0], coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, ) - + shielding_seed = next(protocol) assert shielding_seed == expected_shielding_seed sighash = next(protocol) @@ -198,66 +489,264 @@ def test_z2z(client: Client) -> None: assert signatures == { ZcashSignatureType.TRANSPARENT: [], ZcashSignatureType.ORCHARD_SPEND_AUTH: { - 0: bytes.fromhex( - "23215cda85de918473b83f6f53a7817817286692a69ffd74c12468adeb4cc5a4dbb1990672b24bdd7c3f5ebee8f86a56c707493b9f5d34707bd639a3191a4c04" - ), + 0: bytes.fromhex("fde734e8c13a08abb29d58564b4ff4c70af2ea316fa78e98ac7c4a2e81f9e78a39a3648de21c7b592c3b365f565a5210f419e0344be672f2cbec61944c33f729"), + 1: bytes.fromhex("3827a44663562d4b8126ede68790d9f9e7dedeb30e09013f9757f10d76bb50ade01247f1ed8a1d23b54c3f1939a09beaa4efe900ff35756953c7e5b4c5e9fe39"), + 2: bytes.fromhex("6db8f7ac9c1bdb47fc44424c0bef85ebecfcbaf146387eafa74d921d9611382af1704579e62bfa95e2a1846f9441de99f73f04b6097823ddce71250519819b02"), + 3: bytes.fromhex("1caf83dd43b13f809e42f977a1aa6bf1c4a308eb3bb2764493f52515a15138ba2692bef2f11785e7f71dffc4181d771d4865f03e2cce2be2aa5c27b33cfb193b"), + 4: bytes.fromhex("ae123ecf50e53a1503cc9a6c863ed96d98c1b784144891d9849dd8e89ab2679b173204da524a9d1fd78aabe955bde82f5e97fe044a2c3c90f0554514d1275f29"), + 5: bytes.fromhex("ce0923be6364f2036cb5423d8294ea7608e9afa5fb12b8b832fbb0f4f7fe5f8d2c36aefad625666acdecfb12023058af780a22a1b016ef2504a2eafc3f6a8e1d"), + 6: bytes.fromhex("09ae97848cdc5869913ee731e243cf29ce0128079611c5fe59a25b00e76709a4331103ccc58c6273d93a7c6156534520cd14e5314c9dcc230c9e679b95e99434"), + 7: bytes.fromhex("b30176f365adf74b6dba9f019c2202ecd4ba230dc717106357b23d9cd765800d62ed6132c2f63ff8c5a7d3853c378d5c8fff6cde1c1531741ab87f8cac595518"), + 8: bytes.fromhex("575a95521b01ffe85f2e1b7963b0944feb6e4e6d6dbce12cc8c2159ac292bb11c3a851c03f315c2f92cc3e1e97eccef3e71ed7dd31d21f68d50149acb632ef35"), + 9: bytes.fromhex("efac7c0277ae71384fd8c6efd85109b8b82a8bd0fa13f70f91cb00ed3a639926a778d0ce9ae6e3e0e8ab453e4fe198ebd339ffaf49b41ff92f4d54c92bb6243e"), + 10: bytes.fromhex("49238482640c46f10227edc0e9e9bdd8e673b91af216211c8ebe00d77f6bad3c3316dc7aea32e0c0f9bbfb872ab65352adb9c143dd1c6184c502116a1e611216"), + 11: bytes.fromhex("f0d8ef38b95e5699f901b9333c37b92c9177401372b0712ae640f3fc0170e5881482bb98fe3bfe5ba0b238bae9826c86e3290e797443f26c3f693203810ed009"), }, } - # Accepted by network as 9631f140e1ea037942344f1f8b08d45fc43a5ed043779a38c957e0ca8b1b7a8b - # link: https://sochain.com/tx/ZECTEST/9631f140e1ea037942344f1f8b08d45fc43a5ed043779a38c957e0ca8b1b7a8b + # Accepted by network as b9a1f465f096ba101ba1fc2d6e624dc8726b1379cc23858a251a871fb0a8fb1d -def test_t2z(client: Client) -> None: - t_inp_0 = TxInputType( - address_n=parse_path("m/44h/1h/0h/0/0"), +def test_big_bundle(client: Client) -> None: + # note 0976baf969f0b471f594922ad0e3bd72095cef0a59036bbe932116fd48af241d + inp_0 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("34c0297c0258d5adc98bd1ae74d50ddfe7b8d814b64ddb2b2bfd4c4e38763a36"), + rseed=bytes.fromhex("cf53652d55c73b04a0d0863693c91c69e463b54f334e528e94fcc87944103dfb"), + ) + + # note 7419cdcd9db856735d0cab2e957ffc46328e9751f44f07d591950e2b60420b05 + inp_1 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("1388dd2702f6ec29d8c3c902855728ee18a927ff7f04499fe66c7ef29d7a2c34"), + rseed=bytes.fromhex("0b294ede38fc8e44c78311d201d5aa0d7922ff4e006ef9520fa8e6f823e5de29"), + ) + + # note 0cd344a3d2a45ef49b0c0f2699594689166d58537f1c6acd0838e02dac3d5123 + inp_2 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("52cb572131824b6d460992e2d84faa954462de3fc3d9f45fee7eed451cd3f714"), + rseed=bytes.fromhex("8f36b22a5ae001efdb382b3c15a4a3dd522e73190f88b00331152e84da3fc0db"), + ) + + # note 739e1bf4e4d0bcd111d2acbd6b0c0576942a03370055e14df15a1226ceca5d0e + inp_3 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("5b02bf645ea51b80c6f1b30ec19930733c164dd532bd74f14091db07a323140f"), + rseed=bytes.fromhex("164a076614a1765e5b0c0af9301bac1a30ab93ccf20e092e406235cfb6374d83"), + ) + + # note 23f8ae325bbbd6d261250ca19db5ce2360d123600c05226721f61635df6db120 + inp_4 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("95d53ff00b41cb366d1f47f58c3a9d2f986a06b98fad0c86014a19d513542a35"), + rseed=bytes.fromhex("107dc126db8ce0fcbf82def750e400fa633064550db6bec21e79b4077a6911b0"), + ) + + # note 56c31200acb82de842e94e1d544a47aadf60c0d12f6f83b81b3bfeb9fad0be0c + inp_5 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("e273870f60877315f0206f9e2fdc2c49b0fb54a99a7dc82b8a9f674c0ac48b02"), + rseed=bytes.fromhex("d8b7fb8bec1c205597752b9358acddeb37d8b2206e53d478dd991af02fa08fc8"), + ) + + # note 916529a6585e1105c08b1f1f522c8236c5815d13c6a47f6dd563f029cef58b10 + inp_6 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("c14ef67ee7dde895ade762be84a649e91b850d3420c1b75cfa38ee19509ce434"), + rseed=bytes.fromhex("b80a5c4cbba6871bb71ded3925ff50e43d127c78319fc8020d71d1a59ee4268a"), + ) + + # note 927296905d15708784e636f275a50835a4278f58e7282eaa17496e8d0becdd19 + inp_7 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("e2ab3489decd228532ecf80d1b2d5add208d01d8be7d01d36da1e349b91f642c"), + rseed=bytes.fromhex("11540047df0b296c28ca998fd4f5e33479b32d551e3bcfc6f417d43044a71763"), + ) + + out_0 = ZcashOrchardOutput( + address="utest1gu6rg6hse8v0pd7mhgfn80v5vvdhuwn30wztyrczxsyj46ngpp2ryw36az6vlmlle8xns5k6pdlkgycr27naa2hpn3wspuvsxv0yzz62", amount=1000000, - prev_hash=bytes.fromhex( - "f81bfe926afee9f463f9c7ab0a68e29b78718b42798b48f4227094b3cbe8c3e7" - ), - prev_index=0, + memo=None, ) - o_out_0 = ZcashOrchardOutput( - address=None, - amount=990000, + out_1 = ZcashOrchardOutput( + address="utest1rgn5dkcq9vcf3vr7el74m2p2lslfw9ndn9dqm44ram756f544fndvd82ecv37gkxuum8mr8yrtjlnjwumgn48qrqlhch4znnqselfr5j", + amount=1000000, + memo=None, + ) + out_2 = ZcashOrchardOutput( + address="utest15w5alyhzu2l4k9umc3zxkv4x5mdg3ass97pu7n29arwaxrgc2r7xct3d3j0w0p26mvqxgrku2203xvp9nkwvfgdf9cxmyxlkm5n5cclt", + amount=1000000, memo=None, ) - anchor = bytes.fromhex( - "a6e3b9c237886caa6ca8614428dc9a0ca5e2e54691c68f682348a41f489abf1f" + out_3 = ZcashOrchardOutput( + address="utest1ms4aqpys9vpqdh52cq9stgyuam0wgw7whjtp3xshly5xpnp0070jlvh8dh280vudhg845psrdsx6zv8yvkju9v62cqtg8x8xcv2dxp4a", + amount=1000000, + memo=None, ) - expected_shielding_seed = bytes.fromhex( - "a8f354bff75e1607f80868aaa408e776ce097f8adcbc5074ac603774cb9462e2" + out_4 = ZcashOrchardOutput( + address="utest1lqcxy5sleh0dsdgxefj3jpehkwugxdvmfmemswa0xns3thhq5f2tuydl649utcktpydlttydnamprk3ddm22wszmcpzt608jws9s02nu", + amount=1000000, + memo=None, + ) + out_5 = ZcashOrchardOutput( + address="utest1jdqlx5evfxs65f05kgjdk9gtselavgredtg2kd4pzyf435hwfv250gel6k5hqhsx6rjsl2fauv8s4as7hy9fm2g7kd5vte834qyyupw9", + amount=1000000, + memo=None, ) - expected_sighash = bytes.fromhex( - "c7a2978fe65e8d7742358f542ae2f031aa1a3441af161079237509ee4e74112d" + out_6 = ZcashOrchardOutput( + address="utest19d9xjz0wu73u6h245c3v6j0wv3657akg0qvj0x45cars0dgl7vzdwa3dkm5zhsvgsas4z3wd79ua0ayl0nlcsfgpn0zawmqnlualld52", + amount=1000000, + memo=None, ) - expected_serialized_tx = bytes.fromhex( - "050000800a27a726b4d0d6c2000000000000000001e7c3e8cbb3947022f4488b79428b71789be2680aabc7f963f4e9fe6a92fe1bf8000000006a473044022054e06e576036b6b83f7c676ed1e97810710a50eed52bd6e393ac93084a7a62b602201a5dcf95242b174a9510741692a8666b4f305abff7f2a0b153bd00470a77b66c0121030e669acac1f280d1ddf441cd2ba5e97417bf2689e4bbec86df4f831bf9f7ffd0ffffffff00000002" + out_7 = ZcashOrchardOutput( + address="utest17rr4l9yjvk6le0aqa4vt0aauudhe07tvslhuvhmcds2jnklzx02hn0uw0xegs6ekgnu0ulyeqs6shjzepl2jemuesxpllmuj2gezg4zv", + amount=1000000, + memo=None, ) + anchor = bytes.fromhex("91513dfdbb4453c947bca9d704c3284ce40378e8732b250e9ff2386efb7e493c") + expected_shielding_seed = bytes.fromhex("6b5186c0b2a8800f664effb57eaf17f81b2176283cc62832a5a64d578f1772f8") + expected_sighash = bytes.fromhex("8b308b012587423557513fb16e33c80c838d87e8f41ce665af4bc44c591854fb") + expected_serialized_tx = bytes.fromhex("050000800a27a726b4d0d6c200000000000000000000000008") with client: client.set_expected_responses( [ - request_input(0), + request_orchard_input(0), + request_orchard_input(1), + request_orchard_input(2), + request_orchard_input(3), + request_orchard_input(4), + request_orchard_input(5), + request_orchard_input(6), + request_orchard_input(7), request_orchard_output(0), + ButtonRequest(code=B.ConfirmOutput), + request_orchard_output(1), + ButtonRequest(code=B.ConfirmOutput), + request_orchard_output(2), + ButtonRequest(code=B.ConfirmOutput), + request_orchard_output(3), + ButtonRequest(code=B.ConfirmOutput), + request_orchard_output(4), + ButtonRequest(code=B.ConfirmOutput), + request_orchard_output(5), + ButtonRequest(code=B.ConfirmOutput), + request_orchard_output(6), + ButtonRequest(code=B.ConfirmOutput), + request_orchard_output(7), + ButtonRequest(code=B.ConfirmOutput), ButtonRequest(code=B.SignTx), request_no_op(), # shielding seed + request_orchard_input(5), + request_orchard_output(5), + request_orchard_input(1), + request_orchard_output(4), + request_orchard_input(2), + request_orchard_output(2), + request_orchard_input(6), + request_orchard_output(7), + request_orchard_input(4), + request_orchard_output(3), + request_orchard_input(3), + request_orchard_output(1), + request_orchard_input(7), + request_orchard_output(6), + request_orchard_input(0), request_orchard_output(0), - request_input(0), - request_finished(), # t-signature {i} + request_no_op(), # returns o-signature of o-input 5 in action 0 + request_no_op(), # returns o-signature of o-input 1 in action 1 + request_no_op(), # returns o-signature of o-input 2 in action 2 + request_no_op(), # returns o-signature of o-input 6 in action 3 + request_no_op(), # returns o-signature of o-input 4 in action 4 + request_no_op(), # returns o-signature of o-input 3 in action 5 + request_no_op(), # returns o-signature of o-input 7 in action 6 + request_finished(), # returns o-signature of o-input 0 in action 7 ] ) protocol = zcash.sign_tx( client, - t_inputs=[t_inp_0], - t_outputs=[], - o_inputs=[], - o_outputs=[o_out_0], - anchor=anchor, + inputs=[inp_0, inp_1, inp_2, inp_3, inp_4, inp_5, inp_6, inp_7], + outputs=[out_0, out_1, out_2, out_3, out_4, out_5, out_6, out_7], coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, ) + + shielding_seed = next(protocol) + assert shielding_seed == expected_shielding_seed + sighash = next(protocol) + assert sighash == expected_sighash + signatures, serialized_tx = next(protocol) + assert serialized_tx == expected_serialized_tx + assert signatures == { + ZcashSignatureType.TRANSPARENT: [], + ZcashSignatureType.ORCHARD_SPEND_AUTH: { + 0: bytes.fromhex("cb4b6dbba23df3bf797867cadd324c8b7fc673b32c1ae1e9868281b70a2c412e0e8170834722103cf9a2262eee4c0be10722f1da8e3d3ad708713a5fa4492528"), + 1: bytes.fromhex("2ece02958aacff29a90f07654e0cb0dd1afee035c255a1ee9f30ee56d66f560c3a261c2c1f4738ca752409fab158776e537b9ae15057b4af5c2d651c9a22573b"), + 2: bytes.fromhex("d9622a17dc2e36b080cbc38ff0ac862bd71d2d57f6e76467836dbaea0855fb1b6ecbbb23102589508f836cdff611d00a726da43a9d60dae7e8863674b1afa605"), + 3: bytes.fromhex("c7d832d5df8520674a19b5397aefc4de9f57651afe7e076514a8d44e75e3e9a7086b11150b5565adfefc3c09347ab5413508a0008878fdd78be5061c7c15aa00"), + 4: bytes.fromhex("c57bf94dd38300b074cc9ccdae2c5f22d0c360166fc64f35905740613ffbaabae06199a65148e8a2b89926cf965290b1770ca0b7d824747c2ad0397d9e1cbe34"), + 5: bytes.fromhex("c515cd9891cba0909c801c9ddccf2d2e84864ffc023f804b5773b176d47b55993490c128ab7fc3a05bd5e61610a962264a4582d3f8479535952b9dd19d992729"), + 6: bytes.fromhex("102ecf29217dde10656dafc6d28faab65876aa9749d78f1c0cf1abfd1582c8bb58fa575d9e5054d9801ae0ecf1044ccda8ef63c612e5c2d3d5aad71b4cff9409"), + 7: bytes.fromhex("4711debbde8ff3c9746fe2a7bd35cd5630f5f3c6aa44bc46b7593cdc0cd89c8bf8b973ef7f07afbe7287821ec59c9c08e1a8ea2936d5799546c5630cb494ab1a"), + }, + } + # Accepted by network as fb5418594cc44baf65e61cf4e8878d830cc8336eb13f515735428725018b308b + + +def test_z2t(client: Client) -> None: + # note 7eef85fc66c55557f6356dce9ecff03eebc4abe4b52a4f7ad0c41683d0427e32 + inp_0 = ZcashOrchardInput( + recipient=bytes.fromhex("44a1a2b0e129b57e02d7cca0c0d666bac7de69f113c26e579c628545d58bf798e667b21ad7bcdd81e13914"), + value=1000000, + rho=bytes.fromhex("48d43a90616f6250746b826115215685bf5b93ba4fcf108410de1c6a6508af22"), + rseed=bytes.fromhex("b3773c07b10a2d1cb6f904ea41d002c17f05b494601ccafdff3ceafd977bd9c0"), + ) + + out_0 = TxOutputType( + address_n=parse_path("m/44h/1h/0h/0/0"), + amount=990000, + script_type=OutputScriptType.PAYTOADDRESS, + ) + anchor = bytes.fromhex("91513dfdbb4453c947bca9d704c3284ce40378e8732b250e9ff2386efb7e493c") + expected_shielding_seed = bytes.fromhex("30f5f6303f6999631ef505f02c8cdf38cd77853a0b3a7be25e87afa5fc3b6800") + expected_sighash = bytes.fromhex("5248681d3f6f5af738c9a0a21ada818497ebe99b2187156e161e94fb5bda263b") + expected_serialized_tx = bytes.fromhex("050000800a27a726b4d0d6c200000000000000000001301b0f00000000001976a914a579388225827d9f2fe9014add644487808c695d88ac000002") + + with client: + client.set_expected_responses( + [ + request_orchard_input(0), + request_output(0), + ButtonRequest(code=B.ConfirmOutput), + ButtonRequest(code=B.SignTx), + request_no_op(), # shielding seed + request_orchard_input(0), + request_output(0), + request_finished(), # returns o-signature of o-input 0 in action 1 + ] + ) + + protocol = zcash.sign_tx( + client, + inputs=[inp_0], + outputs=[out_0], + coin_name="Zcash Testnet", + z_address_n=parse_path("m/32h/1h/0h"), + anchor=anchor, + ) + shielding_seed = next(protocol) assert shielding_seed == expected_shielding_seed sighash = next(protocol) @@ -265,13 +754,12 @@ def test_t2z(client: Client) -> None: signatures, serialized_tx = next(protocol) assert serialized_tx == expected_serialized_tx assert signatures == { - ZcashSignatureType.TRANSPARENT: [ - bytes.fromhex( - "3044022054e06e576036b6b83f7c676ed1e97810710a50eed52bd6e393ac93084a7a62b602201a5dcf95242b174a9510741692a8666b4f305abff7f2a0b153bd00470a77b66c" - ), - ], - ZcashSignatureType.ORCHARD_SPEND_AUTH: {}, + ZcashSignatureType.TRANSPARENT: [], + ZcashSignatureType.ORCHARD_SPEND_AUTH: { + 1: bytes.fromhex("56aeef90fdcfe24327e22e21dbf6553ac79c199e94917715748113fd584ce90228e95fc700028272659b63846c98b4386124789281b284a18f7c50bc140e9c21"), + }, } - # Accepted by network as 57cb5b7194583d3d4073d8825668762872dd1b4b3ad88fed5e24bc26b500ea44 - # link: https://sochain.com/tx/ZECTEST/57cb5b7194583d3d4073d8825668762872dd1b4b3ad88fed5e24bc26b500ea44 + # Accepted by network as 3b26da5bfb941e166e1587219be9eb978481da1aa2a0c938f75a6f3f1d684852 + +