5
5
"""Test transaction signing using the signrawtransaction* RPCs."""
6
6
7
7
from test_framework .address import check_script , script_to_p2sh
8
+ from test_framework .key import ECKey
8
9
from test_framework .test_framework import BitcoinTestFramework
9
10
from test_framework .util import assert_equal , assert_raises_rpc_error , find_vout_for_address , hex_str_to_bytes
10
11
from test_framework .messages import sha256
11
12
from test_framework .script import CScript , OP_0 , OP_CHECKSIG
13
+ from test_framework .script_util import key_to_p2pkh_script , script_to_p2sh_p2wsh_script , script_to_p2wsh_script
14
+ from test_framework .wallet_util import bytes_to_wif
12
15
13
16
from decimal import Decimal
14
17
@@ -151,21 +154,24 @@ def script_verification_error_test(self):
151
154
def witness_script_test (self ):
152
155
self .log .info ("Test signing transaction to P2SH-P2WSH addresses without wallet" )
153
156
# Create a new P2SH-P2WSH 1-of-1 multisig address:
154
- embedded_address = self .nodes [1 ].getaddressinfo (self .nodes [1 ].getnewaddress ())
155
- embedded_privkey = self .nodes [1 ].dumpprivkey (embedded_address ["address" ])
156
- p2sh_p2wsh_address = self .nodes [1 ].addmultisigaddress (1 , [embedded_address ["pubkey" ]], "" , "p2sh-segwit" )
157
+ eckey = ECKey ()
158
+ eckey .generate ()
159
+ embedded_privkey = bytes_to_wif (eckey .get_bytes ())
160
+ embedded_pubkey = eckey .get_pubkey ().get_bytes ().hex ()
161
+ p2sh_p2wsh_address = self .nodes [1 ].createmultisig (1 , [embedded_pubkey ], "p2sh-segwit" )
157
162
# send transaction to P2SH-P2WSH 1-of-1 multisig address
158
163
self .nodes [0 ].generate (101 )
159
164
self .nodes [0 ].sendtoaddress (p2sh_p2wsh_address ["address" ], 49.999 )
160
165
self .nodes [0 ].generate (1 )
161
166
self .sync_all ()
162
- # Find the UTXO for the transaction node[1] should have received, check witnessScript matches
163
- unspent_output = self .nodes [1 ].listunspent (0 , 999999 , [p2sh_p2wsh_address ["address" ]])[0 ]
164
- assert_equal (unspent_output ["witnessScript" ], p2sh_p2wsh_address ["redeemScript" ])
165
- p2sh_redeemScript = CScript ([OP_0 , sha256 (hex_str_to_bytes (p2sh_p2wsh_address ["redeemScript" ]))])
166
- assert_equal (unspent_output ["redeemScript" ], p2sh_redeemScript .hex ())
167
+ # Get the UTXO info from scantxoutset
168
+ unspent_output = self .nodes [1 ].scantxoutset ('start' , [p2sh_p2wsh_address ['descriptor' ]])['unspents' ][0 ]
169
+ spk = script_to_p2sh_p2wsh_script (p2sh_p2wsh_address ['redeemScript' ]).hex ()
170
+ unspent_output ['witnessScript' ] = p2sh_p2wsh_address ['redeemScript' ]
171
+ unspent_output ['redeemScript' ] = script_to_p2wsh_script (unspent_output ['witnessScript' ]).hex ()
172
+ assert_equal (spk , unspent_output ['scriptPubKey' ])
167
173
# Now create and sign a transaction spending that output on node[0], which doesn't know the scripts or keys
168
- spending_tx = self .nodes [0 ].createrawtransaction ([unspent_output ], {self .nodes [1 ].getnewaddress (): Decimal ("49.998" )})
174
+ spending_tx = self .nodes [0 ].createrawtransaction ([unspent_output ], {self .nodes [1 ].get_wallet_rpc ( self . default_wallet_name ). getnewaddress (): Decimal ("49.998" )})
169
175
spending_tx_signed = self .nodes [0 ].signrawtransactionwithkey (spending_tx , [embedded_privkey ], [unspent_output ])
170
176
# Check the signing completed successfully
171
177
assert 'complete' in spending_tx_signed
@@ -177,11 +183,13 @@ def witness_script_test(self):
177
183
178
184
def verify_txn_with_witness_script (self , tx_type ):
179
185
self .log .info ("Test with a {} script as the witnessScript" .format (tx_type ))
180
- embedded_addr_info = self .nodes [1 ].getaddressinfo (self .nodes [1 ].getnewaddress ('' , 'legacy' ))
181
- embedded_privkey = self .nodes [1 ].dumpprivkey (embedded_addr_info ['address' ])
186
+ eckey = ECKey ()
187
+ eckey .generate ()
188
+ embedded_privkey = bytes_to_wif (eckey .get_bytes ())
189
+ embedded_pubkey = eckey .get_pubkey ().get_bytes ().hex ()
182
190
witness_script = {
183
- 'P2PKH' : embedded_addr_info [ 'scriptPubKey' ] ,
184
- 'P2PK' : CScript ([hex_str_to_bytes (embedded_addr_info [ 'pubkey' ] ), OP_CHECKSIG ]).hex ()
191
+ 'P2PKH' : key_to_p2pkh_script ( embedded_pubkey ). hex () ,
192
+ 'P2PK' : CScript ([hex_str_to_bytes (embedded_pubkey ), OP_CHECKSIG ]).hex ()
185
193
}.get (tx_type , "Invalid tx_type" )
186
194
redeem_script = CScript ([OP_0 , sha256 (check_script (witness_script ))]).hex ()
187
195
addr = script_to_p2sh (redeem_script )
0 commit comments