3

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.

2

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.

3
  • 1
    Can 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 get Error parsing JSON.
    – Andreas
    Oct 7 at 8:17
  • @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 Oct 10 at 12:57
  • The 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. Oct 10 at 13:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.