<!-- Describe the issue -->
When running importdescriptors with range parameter like [0, 900000] if there is a transaction to any of the addresses in high range, e.g. address derived from 84'/1'/0'/0/777777, bitcoind will hang and no longer respond to some of the RPC requests and syncing stops too.
Furthermore in top I can observe for hours bitcoind process consuming 100% of CPU and doing nothing, also wallet isn't being touched.
Expected behavior
Bitcoin descriptor wallet should be working correctly and import such descriptor without any issues even if the range specified is huge.
To reproduce
- Install latest
bitcoin v23.0(built using depends system), sync to testnet, by addingtestnet=1in yourbitcoin.conf - Create test descriptor wallet:
./bitcoin-cli createwallet test_1
{
"name": "test_1",
"warning": ""
}
- Get descriptors for the wallet:
$ ./bitcoin-cli -rpcwallet=test_1 listdescriptors true
{
"wallet_name": "test_1",
"descriptors": [
{
"desc": "tr(tprvXXX/86'/1'/0'/0/*)#fuh4d6pe",
"timestamp": 1661100252,
"active": true,
"internal": false,
"range": [
0,
999
],
"next": 0
},
{
"desc": "tr(tprvXXX/86'/1'/0'/1/*)#cgj5s03p",
"timestamp": 1661100254,
"active": true,
"internal": true,
"range": [
0,
999
],
"next": 0
},
{
"desc": "sh(wpkh(tprvXXX/49'/1'/0'/0/*))#5uegq3cr",
"timestamp": 1661100252,
"active": true,
"internal": false,
"range": [
0,
999
],
"next": 0
},
{
"desc": "sh(wpkh(tprvXXX/49'/1'/0'/1/*))#jl3dmunh",
"timestamp": 1661100253,
"active": true,
"internal": true,
"range": [
0,
999
],
"next": 0
},
{
"desc": "pkh(tprvXXX/44'/1'/0'/1/*)#t2man3ks",
"timestamp": 1661100253,
"active": true,
"internal": true,
"range": [
0,
999
],
"next": 0
},
{
"desc": "wpkh(tprvXXX/84'/1'/0'/1/*)#dxzkmnkj",
"timestamp": 1661100253,
"active": true,
"internal": true,
"range": [
0,
999
],
"next": 0
},
{
"desc": "pkh(tprvXXX/44'/1'/0'/0/*)#677uwyxg",
"timestamp": 1661100251,
"active": true,
"internal": false,
"range": [
0,
999
],
"next": 0
},
{
"desc": "wpkh(tprvXXX/84'/1'/0'/0/*)#uj8hxxx2",
"timestamp": 1661100252,
"active": true,
"internal": false,
"range": [
0,
999
],
"next": 0
}
]
}
- Derive address with huge derivation path
84'/1'/0'/0/777777for test:
./bitcoin-cli deriveaddresses "wpkh(tprvXXX/84'/1'/0'/0/777777)#60yed6sv"
[
"tb1q5ge5pu77784lzyukur27wz2y2mtc8zzpyfw8nl"
]
- Send some funds to that address:
./bitcoin-cli -rpcwallet="" sendtoaddress tb1q5ge5pu77784lzyukur27wz2y2mtc8zzpyfw8nl 0.00001
c7ca6d0a3c94085d393f973af4cf0bfc4e09e2885a5d0ef42af356ffcbeee41d
- Update descriptor on the wallet to reflect the range (up to 900000):
./bitcoin-cli -rpcwallet=test_1 importdescriptors '[{ "desc": "wpkh(tprvXXX/84h/1h/0h/0/*)#slgn8chc", "timestamp":"now", "range": [0,900000]}]'
[
{
"success": true
}
]
- Now wait for the transaction you've sent earlier to confirm, check logs:
2022-08-21T16:55:15Z [default wallet] AddToWallet c7ca6d0a3c94085d393f973af4cf0bfc4e09e2885a5d0ef42af356ffcbeee41d update
2022-08-21T16:55:15Z [test_1] MarkUnusedAddresses: Detected a used keypool item at index 777777, mark all keypool items up to this item as used
- After this bitcoind and wallet
test_1will hang and no longer sync for hours doing something.. - E.g. doing any request to wallet like:
./bitcoin-cli -rpcwallet=test_1 getwalletinfo
will be hanging forever until the timeout occurs.
System information Ubuntu 18.04.6 LTS
<!-- What version of Bitcoin Core are you using, where did you get it (website, self-compiled, etc)? -->
self-compiled v23.0 using internal depends
<!-- What type of machine are you observing the error on (OS/CPU and disk type)? -->
Wallet is on the NVME, while bitcoind blockchain data is on HDDs, plenty of memory about 16GB and 24 CPUs (AMD Ryzen 9 3900 12-Core Processor)
<!-- GUI-related issue? What is your operating system and its version? If Linux, what is your desktop environment and graphical shell? -->
<!-- Any extra information that might be useful in the debugging process. -->
<!--- This is normally the contents of a `debug.log` or `config.log` file. Raw text or a link to a pastebin type site are preferred. -->
bitcoin.conf:
rpcuser=bitcoin_testnet_rpc
rpcpassword=password
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
walletrbf=1
txindex=1
settxfee=0.0006
paytxfee=0.0006
dbcache=512
walletnotify=/home/bitcoin/.bitcoin/cryptonotify.sh %s %w
testnet=1
[test]
rpcworkqueue=128
txindex=1
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
# default wallet
wallet=
debug.log:
2022-08-21T16:45:01Z Using SQLite Version 3.32.1
2022-08-21T16:45:01Z Using wallet /home/bitcoin/.bitcoin/testnet3/test_1
2022-08-21T16:45:01Z init message: Loading wallet…
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 0, internal = 0
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 1, internal = 0
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 2, internal = 0
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 3, internal = 0
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 0, internal = 1
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 1, internal = 1
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 2, internal = 1
2022-08-21T16:45:01Z [test_1] Setting spkMan to active: id = xxx, type = 3, internal = 1
2022-08-21T16:45:01Z [test_1] Wallet File Version = 169900
2022-08-21T16:45:01Z [test_1] Keys: 8 plaintext, 0 encrypted, 0 w/ metadata, 8 total. Unknown wallet records: 0
2022-08-21T16:45:01Z [test_1] Wallet completed loading in 397ms
2022-08-21T16:45:01Z [test_1] setKeyPool.size() = 8000
2022-08-21T16:45:01Z [test_1] mapWallet.size() = 0
2022-08-21T16:45:01Z [test_1] m_address_book.size() = 0
2022-08-21T16:49:52Z [test_1] Update existing descriptor: wpkh(tpubXXX/84'/1'/0'/0/*)#qfxctt9d
2022-08-21T16:50:29Z [test_1] Deactivate spkMan: id = xxx, type = 2, internal = 0
2022-08-21T16:50:29Z [test_1] RescanFromTime: Rescanning last 23 blocks
2022-08-21T16:50:29Z [test_1] Rescan started from block 000000000000000cda1c49b7202b4714498675d4017d4b49e00f6d13926f3e7a...
2022-08-21T16:50:29Z [test_1] Rescan completed in 2ms
2022-08-21T16:55:15Z UpdateTip: new best=00000000a24fd66fed58a7f821f74af68541b303bae8e26642499b4f5ff9cc35 height=2343214 version=0x20000000 log2_work=74.879888 tx=63453651 date='2022-08-21T16:55:11Z' progress=1.000000 cache=0.1MiB(612txo)
2022-08-21T16:55:15Z [default wallet] AddToWallet c7ca6d0a3c94085d393f973af4cf0bfc4e09e2885a5d0ef42af356ffcbeee41d update
2022-08-21T16:55:15Z [test_1] MarkUnusedAddresses: Detected a used keypool item at index 777777, mark all keypool items up to this item as used