Apparently (credit 0xB10C) there are only 20 key-path and 5 script-path spends of P2TR outputs on the Signet blockchain today (July 7th 2021). How can I increase this number today with say the Bitcoin Core wallet in the upcoming 22.0 release? If there are multiple ways (of varying levels of complexity) please outline them all.
1 Answer
This is a draft answer (incomplete).
To get set up on Signet ie sync the Signet chain and claim some Signet Bitcoin, follow these instructions. (You can run a Signet node in parallel with your mainnet node, ie same hardware)
You now have funds at a non-P2TR (i.e. SegWit v0, bech32) Signet address. Now you need to generate a P2TR address to send funds to so you have funds at a P2TR address (so you can spend from it).
You can't generate a P2TR (SegWit v1, bech32m) address in the wallet using getnewaddress
:
./bitcoin-cli -signet -rpcwallet=insert_wallet_name getnewaddress "" "bech32m"
returns
error code: -12
error message:
Error: No bech32m addresses available.
So you need to construct a Taproot descriptor manually and then import it into your descriptor wallet.
An example Taproot descriptor is:
tr(c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5,{pk(fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556),pk(e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13)})
which describes a P2TR output with the c6...
x-only pubkey as internal key and two script paths.
If you only want to do a key path spend you only need the equivalent of:
tr(c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5)
You can import a tr(xprv/insert_xpriv_here)
descriptor so that your descriptor wallet has the private key to spend from it.
To do: Send signet Bitcoin to this descriptor wallet, spend back to a SegWit v0 address (sendtoaddress) Include generation of xprv?
TBC
This was also discussed on the bitcoin-dev mailing list.
-
2Can you add an example for how to import the descriptor? I'm trying
importdescriptors "tr(c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5)"
(in the console of Bitcoin Core 22.0) but I always getError parsing JSON
.– AndreasCommented Oct 7, 2021 at 8:17 -
1@Andreas: Let me know if "Import a taproot descriptor (of the form "tr(KEY)"), as active descriptor (with active=true), where KEY can be a tprv.../* or any other supported key expression." from Pieter's mailing list post resolves your problem. Thanks Commented Oct 10, 2021 at 12:57
-
1The
importdescriptors
RPC takes as argument a list of objects, each with a decriptor and a few other parameters. Look at the RPC help (help importdescriptors
) and the examples there. Commented Oct 10, 2021 at 13:59