Regularly you'd use walletcreatefundedpsbt
and then walletprocesspsbt
. But since you've only got two coins in your wallet that you want to sweep you can simply use sendall
.
Let's walk through a reproduction of your scenario. I've created two regtest-WIF-encoded private keys:
cRZ9wuYhwKYm82rXfSk9hhc9beJy6p7rV4y3aoAdzqFD6YAUVQcJ
(corresponding to 029d759b09cec94b6f2bd322cedd5d136e7f24a4936998fe24da09827d8a12e9dd
)
cVFkDn9fS1rwU1SR7geC3rgoGNXLpZXsnrCq2gutYVsGA2FoLpCD
(corresponding to 03bd0d0b820dae844107803c9323fe73e81b9adf8abe329930ae9311dab6c3573e
)
I'm creating a new wallet and importing a tr()
and wpkh()
descriptor.
$ bitcoin-cli -regtest createwallet repro_stackexchange
{
"name": "repro_stackexchange",
"warning": ""
}
$ bitcoin-cli -regtest -rpcwallet=repro_stackexchange importdescriptors '[{"desc":"tr(cRZ9wuYhwKYm82rXfSk9hhc9beJy6p7rV4y3aoAdzqFD6YAUVQcJ)#uj39yr2v","timestamp":"now"},{"desc":"wpkh(cVFkDn9fS1rwU1SR7geC3rgoGNXLpZXsnrCq2gutYVsGA2FoLpCD)#nayxphlw","timestamp":"now"}]'
[
{
"success": true
},
{
"success": true
}
]
Now i'm sending a coin to each descriptor:
$ bitcoin-cli -named -regtest -rpcwallet=main sendtoaddress address=bcrt1ps66a3wss3l0ay0agnkd57cfu6qrw26z632e0kez0ppjzkyaq0vhskxlrvs amount=0.00042 fee_rate=1
b2e975dee4ab0c68748e85fc847d7ef3fef44f53ee95e4765b1cc2b2c33939d2
$ bitcoin-cli -named -regtest -rpcwallet=main sendtoaddress address=bcrt1q9vsfxgf4t3wmtj9429g539txyv4p2qnuak03sv amount=0.00043 fee_rate=1
e34a3b8116f328d2b1529134dfcc795fbe27eae3991eeb017bc582879cb73b81
We can see that the reproduction wallet got the two coins:
$ bitcoin-cli -regtest -rpcwallet=repro_stackexchange listunspent 0
[
{
"txid": "e34a3b8116f328d2b1529134dfcc795fbe27eae3991eeb017bc582879cb73b81",
"vout": 0,
"address": "bcrt1q9vsfxgf4t3wmtj9429g539txyv4p2qnuak03sv",
"label": "",
"scriptPubKey": "00142b209321355c5db5c8b55151489566232a15027c",
"amount": 0.00043000,
"confirmations": 0,
"ancestorcount": 1,
"ancestorsize": 130,
"ancestorfees": 130,
"spendable": true,
"solvable": true,
"desc": "wpkh([2b209321]03bd0d0b820dae844107803c9323fe73e81b9adf8abe329930ae9311dab6c3573e)#k6qfdnw5",
"parent_descs": [
"wpkh(03bd0d0b820dae844107803c9323fe73e81b9adf8abe329930ae9311dab6c3573e)#45n94hja"
],
"safe": false
},
{
"txid": "b2e975dee4ab0c68748e85fc847d7ef3fef44f53ee95e4765b1cc2b2c33939d2",
"vout": 1,
"address": "bcrt1ps66a3wss3l0ay0agnkd57cfu6qrw26z632e0kez0ppjzkyaq0vhskxlrvs",
"label": "",
"scriptPubKey": "512086b5d8ba108fdfd23fa89d9b4f613cd006e5685a8ab2fb644f08642b13a07b2f",
"amount": 0.00042000,
"confirmations": 0,
"ancestorcount": 1,
"ancestorsize": 154,
"ancestorfees": 154,
"spendable": true,
"solvable": true,
"desc": "tr([caa3ae90]9d759b09cec94b6f2bd322cedd5d136e7f24a4936998fe24da09827d8a12e9dd)#e2lr407t",
"parent_descs": [
"tr(9d759b09cec94b6f2bd322cedd5d136e7f24a4936998fe24da09827d8a12e9dd)#u9ras3xm"
],
"safe": false
}
]
Now i'll get the transactions confirmed and sweep the coins using sendall
:
$ bitcoin-cli -regtest -rpcwallet=main generatetoaddress 1 $(bitcoin-cli -regtest -rpcwallet=main getnewaddress)
$ bitcoin-cli -named -regtest -rpcwallet=repro_stackexchange sendall recipients='["bcrt1qre2fezscuke8qaj9ham2klddj2rt7m4s78tvqq"]' fee_rate=1
{
"txid": "a39b70bf4636bb78053d10a3bc03eb6866e6777e84aeb274bb4002a543b7bb99",
"complete": true
}
Let's inspect the transaction. It does indeed spend the two coins from the wallet (one Taproot and one native segwit v0 as you can see from the witness):
$ bitcoin-cli -regtest getrawtransaction a39b70bf4636bb78053d10a3bc03eb6866e6777e84aeb274bb4002a543b7bb99 1
{
"txid": "a39b70bf4636bb78053d10a3bc03eb6866e6777e84aeb274bb4002a543b7bb99",
"hash": "be1fcf89ec92649ee0780a8ea86ade1512a7fff6cfc8f75430b1115f1321b8f1",
"version": 2,
"size": 298,
"vsize": 167,
"weight": 667,
"locktime": 0,
"vin": [
{
"txid": "e34a3b8116f328d2b1529134dfcc795fbe27eae3991eeb017bc582879cb73b81",
"vout": 0,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"304402201e3ba83ca58a357e72d9df4d555f11a747e128ab2131868cb5620afc9b383d540220011c6fe77e37ed8ca83d50870fc5cc3995ecbd1cbd6305ede59bd4fd8aa05c2901",
"03bd0d0b820dae844107803c9323fe73e81b9adf8abe329930ae9311dab6c3573e"
],
"sequence": 4294967293
},
{
"txid": "b2e975dee4ab0c68748e85fc847d7ef3fef44f53ee95e4765b1cc2b2c33939d2",
"vout": 1,
"scriptSig": {
"asm": "",
"hex": ""
},
"txinwitness": [
"6cd85a806478d00f062e0bd7a43f46d7be082e4287819fcf07d3dda1d6a613a11e1197d15021f87aad16a697e326181d82156ff957fcb6593f5d030f33516471"
],
"sequence": 4294967293
}
],
"vout": [
{
"value": 0.00084833,
"n": 0,
"scriptPubKey": {
"asm": "0 1e549c8a18e5b2707645bf76ab7dad9286bf6eb0",
"desc": "addr(bcrt1qre2fezscuke8qaj9ham2klddj2rt7m4s78tvqq)#5gumgp89",
"hex": "00141e549c8a18e5b2707645bf76ab7dad9286bf6eb0",
"address": "bcrt1qre2fezscuke8qaj9ham2klddj2rt7m4s78tvqq",
"type": "witness_v0_keyhash"
}
}
],
"hex": "02000000000102813bb79c8782c57b01eb1e99e3ea27be5f79ccdf349152b1d228f316813b4ae30000000000fdffffffd23939c3b2c21c5b76e495ee534ff4fef37e7d84fc858e74680cabe4de75e9b20100000000fdffffff01614b0100000000001600141e549c8a18e5b2707645bf76ab7dad9286bf6eb00247304402201e3ba83ca58a357e72d9df4d555f11a747e128ab2131868cb5620afc9b383d540220011c6fe77e37ed8ca83d50870fc5cc3995ecbd1cbd6305ede59bd4fd8aa05c29012103bd0d0b820dae844107803c9323fe73e81b9adf8abe329930ae9311dab6c3573e01406cd85a806478d00f062e0bd7a43f46d7be082e4287819fcf07d3dda1d6a613a11e1197d15021f87aad16a697e326181d82156ff957fcb6593f5d030f3351647100000000"
}
tr(WIF)
, but scripts can also be included there). Further, you need to use PSBT RPCs; the old raw transacrion RPCs in general do not support taproot.createpsbt
thenwalletcreatefundedpsbt
but not sure where to go from here. I've tried bothwalletprocesspsbt
andfinalizepsbt
but they return the base64 encoding and"complete": false
. I've triedutxoupdatepsbt
but unsure what I would need to do since I've already successfully imported this into my wallet. What steps am I missing?tr(WIF)
descriptor is not ranged, so that's clearly not what you're doing on regtest