This is an implementation of the Schnorr/taproot consensus rules proposed by BIPs 340, 341, and 342.
It consists of:
- Addition of Schnorr signatures and 32-byte pubkey support to libsecp256k1 subtree (https://github.com/bitcoin-core/secp256k1/pull/558 PR 558), following BIP 340.
- The taproot validation specified in BIP 341.
- Script validation under taproot (aka tapscript), specified in BIP 342.
- Addition of signing logic for Schnorr/Taproot to the Python test framework, and tests for the above.
This does not include any wallet support.
Related PRs and PRs that were extracted from this and submitted separately: #18002 #16902 #18388 #18401 #18422 #18675 #19228
Dependencies:
- Merge BIP340 support in libsecp256k1
- Update libsecp256k1 subtree in master (#19944)
TODO:
- Tests for pre-activation (verify that consensus behavior doesn’t change until flag is enabled)
- Extract small & fast BIP341/BIP342 test vectors with good coverage out of the programmatic & slow feature_taproot.py test