diff --git a/tests/device_tests/test_msg_signtx_replacement.py b/tests/device_tests/test_msg_signtx_replacement.py index 3b0a28532..03b76b57d 100644 --- a/tests/device_tests/test_msg_signtx_replacement.py +++ b/tests/device_tests/test_msg_signtx_replacement.py @@ -68,6 +68,9 @@ TXHASH_6673b7 = bytes.fromhex( TXHASH_927784 = bytes.fromhex( "927784e07bbcefc4c738f5c31c7a739978fc86f35514edf7e7da25d53d83030b" ) +TXHASH_43d273 = bytes.fromhex( + "43d273d3caf41759ad843474f960fbf80ff2ec961135d018b61e9fab3ad1fc06" +) @pytest.mark.skip_t1 @@ -138,6 +141,78 @@ def test_p2pkh_fee_bump(client): ) +@pytest.mark.skip_t1 +def test_p2wpkh_finalize(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, + script_type=messages.InputScriptType.SPENDWITNESS, + prev_hash=TXHASH_43d273, + prev_index=1, + orig_hash=TXHASH_70f987, + orig_index=0, + sequence=4294967294, + ) + + # Original external output (actually 84h/1h/0h/0/0). + out1 = messages.TxOutputType( + address="tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9", + amount=100000, + script_type=messages.OutputScriptType.PAYTOWITNESS, + orig_hash=TXHASH_70f987, + orig_index=0, + ) + + # 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, + script_type=messages.OutputScriptType.PAYTOWITNESS, + orig_hash=TXHASH_70f987, + orig_index=1, + ) + + with client: + client.set_expected_responses( + [ + request_input(0), + request_meta(TXHASH_70f987), + request_orig_input(0, TXHASH_70f987), + request_output(0), + request_orig_output(0, TXHASH_70f987), + request_output(1), + request_orig_output(1, TXHASH_70f987), + messages.ButtonRequest(code=B.SignTx), + messages.ButtonRequest(code=B.SignTx), + request_input(0), + request_meta(TXHASH_43d273), + request_input(0, TXHASH_43d273), + request_output(0, TXHASH_43d273), + request_output(1, TXHASH_43d273), + request_output(2, TXHASH_43d273), + request_input(0), + request_output(0), + request_output(1), + request_input(0), + request_finished(), + ] + ) + _, serialized_tx = btc.sign_tx( + client, + "Testnet", + [inp1], + [out1, out2], + lock_time=1348713, + prev_txes=TX_CACHE_TESTNET, + ) + + assert ( + serialized_tx.hex() + == "0100000000010106fcd13aab9f1eb618d0351196ecf20ff8fb60f9743484ad5917f4cad373d2430100000000feffffff02a086010000000000160014b31dc2a236505a6cb9201fa0411ca38a254a7bf198a52f0100000000160014167dae080bca35c9ea49c0c8335dcc4b252a1d700247304402201ee1828ab0ca7f8113989399edda8394c65e5c3c9fe597a78890c5d2c9bd2aeb022010e76ad6abe171e5cded6b374a344ee18a51d38477b76a4b6fb30289ed24beff01210357cb3a5918d15d224f14a89f0eb54478272108f6cbb9c473c1565e55260f6e9369941400" + ) + + @pytest.mark.skip_t1 @pytest.mark.parametrize( "out1_amount, out2_amount, copayer_witness, fee_confirm, expected_tx", diff --git a/tests/txcache/testnet/43d273d3caf41759ad843474f960fbf80ff2ec961135d018b61e9fab3ad1fc06.json b/tests/txcache/testnet/43d273d3caf41759ad843474f960fbf80ff2ec961135d018b61e9fab3ad1fc06.json new file mode 100644 index 000000000..cc96838c2 --- /dev/null +++ b/tests/txcache/testnet/43d273d3caf41759ad843474f960fbf80ff2ec961135d018b61e9fab3ad1fc06.json @@ -0,0 +1,27 @@ +{ + "bin_outputs": [ + { + "amount": 10000000, + "script_pubkey": "a914051877a0cc43165e48975c1e62bdef3b6c942a3887" + }, + { + "amount": 20000000, + "script_pubkey": "00142fde3b3d1644fd16bd18a78138ae3873398eca37" + }, + { + "amount": 99999694, + "script_pubkey": "0014cc8067093f6f843d6d3e22004a4290cd0c0f336b" + } + ], + "inputs": [ + { + "prev_hash": "e294c4c172c3d87991b0369e45d6af8584be92914d01e3060fad1ed31d12ff00", + "prev_index": 0, + "script_sig": "", + "script_type": "SPENDADDRESS", + "sequence": 4294967293 + } + ], + "lock_time": 1287124, + "version": 1 +} diff --git a/tests/txcache/testnet/70f9871eb03a38405cfd7a01e0e1448678132d815e2c9f552ad83ae23969509e.json b/tests/txcache/testnet/70f9871eb03a38405cfd7a01e0e1448678132d815e2c9f552ad83ae23969509e.json index 1df61a6ec..1ac02438e 100644 --- a/tests/txcache/testnet/70f9871eb03a38405cfd7a01e0e1448678132d815e2c9f552ad83ae23969509e.json +++ b/tests/txcache/testnet/70f9871eb03a38405cfd7a01e0e1448678132d815e2c9f552ad83ae23969509e.json @@ -13,10 +13,26 @@ { "prev_hash": "43d273d3caf41759ad843474f960fbf80ff2ec961135d018b61e9fab3ad1fc06", "prev_index": 1, + "address_n": [2147483732, 2147483649, 2147483648, 0, 2], + "amount": 20000000, + "script_type": 3, "script_sig": "", + "witness": "0247304402207da4ce78bf9175ad4764794013360be569d3902861a54922aad6239659422f86022050145fc897a806b4ef06777a58471d39e9a10482cd8e61819ee18d6d22eaa6be01210357cb3a5918d15d224f14a89f0eb54478272108f6cbb9c473c1565e55260f6e93", "sequence": 4294967293 } ], "lock_time": 1348713, + "outputs": [ + { + "address": "tb1qkvwu9g3k2pdxewfqr7syz89r3gj557l3uuf9r9", + "amount": 100000, + "script_type": 4 + }, + { + "address_n": [2147483732, 2147483649, 2147483648, 1, 1], + "amount": 19899859, + "script_type": 4 + } + ], "version": 1 } diff --git a/tests/ui_tests/fixtures.json b/tests/ui_tests/fixtures.json index 2025bed0e..c1d081519 100644 --- a/tests/ui_tests/fixtures.json +++ b/tests/ui_tests/fixtures.json @@ -342,6 +342,7 @@ "test_msg_signtx_komodo.py-test_one_one_rewards_claim": "751e83d63bf01c6c57047b5e004629d613df75342371cd43a7b4b80a07f4b88d", "test_msg_signtx_peercoin.py::test_timestamp_included": "825b9bdf5238c5c6415a254a6bae4b2bd9df8fc5cb31f66f0c20145cb4e60bbb", "test_msg_signtx_replacement.py::test_p2pkh_fee_bump": "881f6491e9f4417cd747dda2dc0eaafdf1a4769a5e53aa303bb06547d6a9133b", +"test_msg_signtx_replacement.py::test_p2wpkh_finalize": "1147c6996c193b904b72d38def07c692cf48d7bdbe244343c9e98ee0db497d11", "test_msg_signtx_replacement.py::test_p2wpkh_in_p2sh_remove_change": "f66437cc88d016ddb0b3fd4e6d2c6536d9a1745dfc92ce9cd334c3cbaaefb4a9", "test_msg_signtx_replacement.py::test_p2wpkh_payjoin[19909659-90000-02483045022100aa1b91fb25cc9a0ace4": "a5473b5f3931fb6530a991e45aa32507069a7b402878d1eda2ce6e8be1a673e1", "test_msg_signtx_replacement.py::test_p2wpkh_payjoin[19909718-90000-024730440220753f53049ca43d55f6563": "a5473b5f3931fb6530a991e45aa32507069a7b402878d1eda2ce6e8be1a673e1",