mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
test: test rescanning encrypted wallets
This commit is contained in:
parent
493b813e17
commit
6a5b348f2e
2 changed files with 67 additions and 0 deletions
|
@ -667,5 +667,33 @@ class ImportDescriptorsTest(BitcoinTestFramework):
|
||||||
success=True,
|
success=True,
|
||||||
warnings=["Unknown output type, cannot set descriptor to active."])
|
warnings=["Unknown output type, cannot set descriptor to active."])
|
||||||
|
|
||||||
|
self.log.info("Test importing a descriptor to an encrypted wallet")
|
||||||
|
|
||||||
|
descriptor = {"desc": descsum_create("pkh(" + xpriv + "/1h/*h)"),
|
||||||
|
"timestamp": "now",
|
||||||
|
"active": True,
|
||||||
|
"range": [0,4000],
|
||||||
|
"next_index": 4000}
|
||||||
|
|
||||||
|
self.nodes[0].createwallet("temp_wallet", blank=True, descriptors=True)
|
||||||
|
temp_wallet = self.nodes[0].get_wallet_rpc("temp_wallet")
|
||||||
|
temp_wallet.importdescriptors([descriptor])
|
||||||
|
self.generatetoaddress(self.nodes[0], COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
|
||||||
|
self.generatetoaddress(self.nodes[0], COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
|
||||||
|
|
||||||
|
self.nodes[0].createwallet("encrypted_wallet", blank=True, descriptors=True, passphrase="passphrase")
|
||||||
|
encrypted_wallet = self.nodes[0].get_wallet_rpc("encrypted_wallet")
|
||||||
|
|
||||||
|
descriptor["timestamp"] = 0
|
||||||
|
descriptor["next_index"] = 0
|
||||||
|
|
||||||
|
batch = []
|
||||||
|
batch.append(encrypted_wallet.walletpassphrase.get_request("passphrase", 3))
|
||||||
|
batch.append(encrypted_wallet.importdescriptors.get_request([descriptor]))
|
||||||
|
|
||||||
|
encrypted_wallet.batch(batch)
|
||||||
|
|
||||||
|
assert_equal(temp_wallet.getbalance(), encrypted_wallet.getbalance())
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
ImportDescriptorsTest().main()
|
ImportDescriptorsTest().main()
|
||||||
|
|
|
@ -14,6 +14,9 @@ from test_framework.util import (
|
||||||
assert_raises_rpc_error,
|
assert_raises_rpc_error,
|
||||||
set_node_times,
|
set_node_times,
|
||||||
)
|
)
|
||||||
|
from test_framework.wallet_util import (
|
||||||
|
get_generate_key,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TransactionTimeRescanTest(BitcoinTestFramework):
|
class TransactionTimeRescanTest(BitcoinTestFramework):
|
||||||
|
@ -23,6 +26,10 @@ class TransactionTimeRescanTest(BitcoinTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.setup_clean_chain = False
|
self.setup_clean_chain = False
|
||||||
self.num_nodes = 3
|
self.num_nodes = 3
|
||||||
|
self.extra_args = [["-keypool=400"],
|
||||||
|
["-keypool=400"],
|
||||||
|
[]
|
||||||
|
]
|
||||||
|
|
||||||
def skip_test_if_missing_module(self):
|
def skip_test_if_missing_module(self):
|
||||||
self.skip_if_no_wallet()
|
self.skip_if_no_wallet()
|
||||||
|
@ -167,6 +174,38 @@ class TransactionTimeRescanTest(BitcoinTestFramework):
|
||||||
assert_raises_rpc_error(-8, "Invalid stop_height", restorewo_wallet.rescanblockchain, 1, -1)
|
assert_raises_rpc_error(-8, "Invalid stop_height", restorewo_wallet.rescanblockchain, 1, -1)
|
||||||
assert_raises_rpc_error(-8, "stop_height must be greater than start_height", restorewo_wallet.rescanblockchain, 20, 10)
|
assert_raises_rpc_error(-8, "stop_height must be greater than start_height", restorewo_wallet.rescanblockchain, 20, 10)
|
||||||
|
|
||||||
|
self.log.info("Test `rescanblockchain` fails when wallet is encrypted and locked")
|
||||||
|
usernode.createwallet(wallet_name="enc_wallet", passphrase="passphrase")
|
||||||
|
enc_wallet = usernode.get_wallet_rpc("enc_wallet")
|
||||||
|
assert_raises_rpc_error(-13, "Error: Please enter the wallet passphrase with walletpassphrase first.", enc_wallet.rescanblockchain)
|
||||||
|
|
||||||
|
if not self.options.descriptors:
|
||||||
|
self.log.info("Test rescanning an encrypted wallet")
|
||||||
|
hd_seed = get_generate_key().privkey
|
||||||
|
|
||||||
|
usernode.createwallet(wallet_name="temp_wallet", blank=True, descriptors=False)
|
||||||
|
temp_wallet = usernode.get_wallet_rpc("temp_wallet")
|
||||||
|
temp_wallet.sethdseed(seed=hd_seed)
|
||||||
|
|
||||||
|
for i in range(399):
|
||||||
|
temp_wallet.getnewaddress()
|
||||||
|
|
||||||
|
self.generatetoaddress(usernode, COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
|
||||||
|
self.generatetoaddress(usernode, COINBASE_MATURITY + 1, temp_wallet.getnewaddress())
|
||||||
|
|
||||||
|
minernode.createwallet("encrypted_wallet", blank=True, passphrase="passphrase", descriptors=False)
|
||||||
|
encrypted_wallet = minernode.get_wallet_rpc("encrypted_wallet")
|
||||||
|
|
||||||
|
encrypted_wallet.walletpassphrase("passphrase", 1)
|
||||||
|
encrypted_wallet.sethdseed(seed=hd_seed)
|
||||||
|
|
||||||
|
batch = []
|
||||||
|
batch.append(encrypted_wallet.walletpassphrase.get_request("passphrase", 3))
|
||||||
|
batch.append(encrypted_wallet.rescanblockchain.get_request())
|
||||||
|
|
||||||
|
encrypted_wallet.batch(batch)
|
||||||
|
|
||||||
|
assert_equal(encrypted_wallet.getbalance(), temp_wallet.getbalance())
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
TransactionTimeRescanTest().main()
|
TransactionTimeRescanTest().main()
|
||||||
|
|
Loading…
Add table
Reference in a new issue