[wallet] Ensure wallet is unlocked before signing
Github-Pull: #14310
Rebased-From: db15805668
This commit is contained in:
parent
5150accdd2
commit
bb90695551
2 changed files with 11 additions and 0 deletions
|
@ -3732,6 +3732,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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,14 @@ class SignRawTransactionsTest(BitcoinTestFramework):
|
||||||
rawTxSigned2 = self.nodes[0].signrawtransaction(rawTx, inputs, privKeys)
|
rawTxSigned2 = self.nodes[0].signrawtransaction(rawTx, inputs, privKeys)
|
||||||
assert_equal(rawTxSigned, rawTxSigned2)
|
assert_equal(rawTxSigned, rawTxSigned2)
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
@ -150,6 +158,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__':
|
||||||
|
|
Loading…
Reference in a new issue