What wallet support for Taproot will be included in Bitcoin Core v22.0? What will I be able to do and what won't I be able to do using the Core wallet?
1 Answer
This is a draft answer and may contain inaccuracies. I will update if it does.
It is worth noting that it is looking likely that Taproot will be active on mainnet in November 2021 but until then Taproot rules will not be enforced on the network. Any attempted Taproot spends before then will be treated as anyone-can-spend by the network.
Bitcoin Core v0.21.1 allowed you to send to a Taproot (SegWit version 1, bech32m encoding) address. It also supported validating a Taproot spend on regtest and signet. But it didn't let you generate a mainnet Taproot address in the wallet (you could generate a regtest Taproot address?) or spend from a Taproot UTXO.
For v22.0 there are wallet pull requests (e.g. PR 21365, PR 22051, PR 22166) to allow you to spend from a Taproot UTXO as long as the key path or script path you are spending from is only a single pubkey spend (e.g. the descriptors tr(KEY)
or tr(KEY,{pk(KEY),pk(KEY)}
. Any scripts, multisig or MuSig spends (e.g. tr(MUSIG, {wsh(SCRIPT), wmulti(k,KEY_1,KEY_2,...,KEY_n)}
) aren't supported. The descriptor wallet doesn't yet support arbitrary scripts at all, Taproot or non-Taproot, that will come later when descriptors support Miniscript. The wallet will generate a valid Schnorr signature (using the libsecp256k1 library) to spend the Taproot UTXO but won't broadcast it (that will be supported later after Taproot has activated in November 2021).
You can create a descriptor wallet using the instructions here.
Information on the various descriptors (including the tr()
Taproot descriptor) is here. That doc has a Taproot descriptor example.
tr(c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5,{pk(fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556),pk(e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13)})
c6047f...
, fff97b...
and e493db...
are example Schnorr public keys. c6047f...
is in the Taproot key path and the other two public keys are in the script path, the Merkle tree of alternative scripts that can be spent from within a P2TR address.