mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-19 05:45:05 +01:00
test: test rescanning encrypted wallets
This commit is contained in:
parent
493b813e17
commit
6a5b348f2e
@ -667,5 +667,33 @@ class ImportDescriptorsTest(BitcoinTestFramework):
|
||||
success=True,
|
||||
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__':
|
||||
ImportDescriptorsTest().main()
|
||||
|
@ -14,6 +14,9 @@ from test_framework.util import (
|
||||
assert_raises_rpc_error,
|
||||
set_node_times,
|
||||
)
|
||||
from test_framework.wallet_util import (
|
||||
get_generate_key,
|
||||
)
|
||||
|
||||
|
||||
class TransactionTimeRescanTest(BitcoinTestFramework):
|
||||
@ -23,6 +26,10 @@ class TransactionTimeRescanTest(BitcoinTestFramework):
|
||||
def set_test_params(self):
|
||||
self.setup_clean_chain = False
|
||||
self.num_nodes = 3
|
||||
self.extra_args = [["-keypool=400"],
|
||||
["-keypool=400"],
|
||||
[]
|
||||
]
|
||||
|
||||
def skip_test_if_missing_module(self):
|
||||
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, "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__':
|
||||
TransactionTimeRescanTest().main()
|
||||
|
Loading…
Reference in New Issue
Block a user