[wallet] Ensure wallet is unlocked before signing

This commit is contained in:
gustavonalle 2018-09-24 16:10:23 +01:00
parent 985d28cc90
commit db15805668
2 changed files with 11 additions and 0 deletions

View file

@ -3116,6 +3116,8 @@ UniValue signrawtransactionwithwallet(const JSONRPCRequest& request)
// Sign the transaction // Sign the transaction
LOCK2(cs_main, pwallet->cs_wallet); LOCK2(cs_main, pwallet->cs_wallet);
EnsureWalletIsUnlocked(pwallet);
return SignTransaction(mtx, request.params[1], pwallet, false, request.params[2]); return SignTransaction(mtx, request.params[1], pwallet, false, request.params[2]);
} }

View file

@ -45,6 +45,14 @@ class SignRawTransactionsTest(BitcoinTestFramework):
# 2) No script verification error occurred # 2) No script verification error occurred
assert 'errors' not in rawTxSigned assert 'errors' not in rawTxSigned
def test_with_lock_outputs(self):
"""Test correct error reporting when trying to sign a locked output"""
self.nodes[0].encryptwallet("password")
self.restart_node(0)
rawTx = '020000000156b958f78e3f24e0b2f4e4db1255426b0902027cb37e3ddadb52e37c3557dddb0000000000ffffffff01c0a6b929010000001600149a2ee8c77140a053f36018ac8124a6ececc1668a00000000'
assert_raises_rpc_error(-13, "Please enter the wallet passphrase with walletpassphrase first", self.nodes[0].signrawtransactionwithwallet, rawTx)
def script_verification_error_test(self): def script_verification_error_test(self):
"""Create and sign a raw transaction with valid (vin 0), invalid (vin 1) and one missing (vin 2) input script. """Create and sign a raw transaction with valid (vin 0), invalid (vin 1) and one missing (vin 2) input script.
@ -138,6 +146,7 @@ class SignRawTransactionsTest(BitcoinTestFramework):
def run_test(self): def run_test(self):
self.successful_signing_test() self.successful_signing_test()
self.script_verification_error_test() self.script_verification_error_test()
self.test_with_lock_outputs()
if __name__ == '__main__': if __name__ == '__main__':