We drop taproot from getdeploymentinfo RPC, rather than mark it as buried, because this is not a buried deployment in the sense of BIP 90. This is because the activation height has been completely removed from the code, unlike the hardcoded DEPLOYMENT_SEGWIT height which is still relied on.[^1]
[^1]: DEPLOYMENT_SEGWIT is used in IsBlockMutated to determine if witness data is allowed, it's used for BIP147, to trigger NeedsRedownload() for users who upgraded after a decade, and for a few other things.
DrahtBot
commented at 2:34 PM on September 30, 2022:
contributor
<!--e57a25ab6845829454e8d69fc972939a-->
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.
If your review is incorrectly listed, please copy-paste <code><!--meta-tag:bot-skip--></code> into the comment that the bot should ignore.
<!--174a7506f384e20aa4161008e828411d-->
Conflicts
Reviewers, this pull request conflicts with the following ones:
#34049 (rpc: Disallow captures in RPCMethodImpl by ajtowns)
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.
<!--5faf32d7da4f0f540f40219e4f7537a3-->
luke-jr
commented at 2:04 PM on October 2, 2022:
member
Concept ~0, but I object the claim in general that commits "sufficiently buried by other commits, and thus less likely to be reverted". Git isn't PoW, and "burying" commits does not make them less likely to be reverted.
Sjors
commented at 9:22 AM on October 3, 2022:
member
@luke-jr changed the wording to "is (probably) included in v24.0".
ajtowns
commented at 3:47 AM on October 8, 2022:
contributor
This should be updating MinBIP9WarningHeight above the taproot activation height (otherwise you should see "warnings": "Unknown new rules activated (versionbit 2)" due to miner signalling)
Sjors force-pushed on Nov 1, 2022
Sjors
commented at 9:41 AM on November 1, 2022:
member
in
src/consensus/params.h:None
in
8f96e52405outdated
95 | @@ -94,7 +96,7 @@ struct Params {
96 | * BIP 16 exception blocks. */
97 | int SegwitHeight;
98 | /** Don't warn about unknown BIP 9 activations below this height.
99 | - * This prevents us from warning about the CSV and segwit activations. */ 100 | + * This prevents us from warning about the CSV,segwit and taproot activations. */
Added. IIUC the WarningBitsConditionChecker uses ComputeBlockVersion (also used by the miner), which in turn uses VersionBitsConditionChecker, which uses vDeployments to determine if a softfork is STARTED or LOCKED_IN. If so it won't issue the warning. This logic is rather convoluted…
Sjors force-pushed on Oct 23, 2023
DrahtBot added the label CI failed on Oct 23, 2023
DrahtBot removed the label CI failed on Oct 26, 2023
barrystyle referenced this in commit 6eb671c734 on Dec 16, 2023
Sjors force-pushed on Jan 9, 2024
Sjors
commented at 9:06 AM on January 9, 2024:
member
DrahtBot added the label CI failed on Jan 14, 2024
Sjors force-pushed on Feb 13, 2024
DrahtBot removed the label CI failed on Feb 13, 2024
DrahtBot added the label Needs rebase on Mar 5, 2024
Sjors force-pushed on Mar 7, 2024
Sjors
commented at 10:36 AM on March 7, 2024:
member
Rebased due to (trivial) merge conflict after #29547.
I should also point out that Silent Payments makes use of the Taproot activation height (e.g. for a more efficient indexer), but I don't think that's a good reason to keep these consensus params around.
DrahtBot removed the label Needs rebase on Mar 7, 2024
Sjors force-pushed on May 30, 2024
DrahtBot added the label CI failed on May 30, 2024
DrahtBot removed the label CI failed on May 30, 2024
DrahtBot added the label CI failed on Jul 15, 2024
DrahtBot removed the label CI failed on Jul 20, 2024
DrahtBot added the label Needs rebase on Aug 5, 2024
Sjors force-pushed on Aug 12, 2024
Sjors
commented at 8:38 AM on August 12, 2024:
member
DrahtBot requested review from l0rinc on Mar 7, 2025
in
src/consensus/params.h:None
in
301e41985eoutdated
17 | @@ -18,21 +18,24 @@ namespace Consensus {
18 | /**
19 | * A buried deployment is one where the height of the activation has been hardcoded into
20 | * the client implementation long after the consensus change has activated. See BIP 90.
21 | + * Consensus changes for which the new rules enforced from genesis are not listed here.
DrahtBot removed the label Needs rebase on May 14, 2025
DrahtBot added the label Needs rebase on Jun 19, 2025
Sjors force-pushed on Jun 19, 2025
Sjors
commented at 8:09 AM on June 19, 2025:
member
Rebased after #31981 for minor conflict in mining_basic.py.
in
doc/bips.md:None
in
f08e573a87outdated
57 | @@ -58,7 +58,8 @@ BIPs that are implemented by Bitcoin Core:
58 | Validation rules for Taproot (including Schnorr signatures and Tapscript
59 | leaves) are implemented as of **v0.21.0** ([PR 19953](https://github.com/bitcoin/bitcoin/pull/19953)),
60 | with mainnet activation as of **v0.21.1** ([PR 21377](https://github.com/bitcoin/bitcoin/pull/21377),
61 | - [PR 21686](https://github.com/bitcoin/bitcoin/pull/21686)). 62 | + [PR 21686](https://github.com/bitcoin/bitcoin/pull/21686)), 63 | + always active as of **v24.0** ([PR 23536](https://github.com/bitcoin/bitcoin/pull/23536)).
DrahtBot removed the label Needs rebase on Sep 3, 2025
sedited
commented at 5:03 PM on December 28, 2025:
contributor
Concept ACK
Seems reasonable given that we say "Consensus changes for which the new rules are enforced from genesis are not listed here."
sedited
commented at 9:07 AM on February 24, 2026:
contributor
We drop taproot from getdeploymentinfo RPC, rather than mark it as buried, because this is not a buried deployment in the sense of BIP 90. This is because the activation height has been completely removed from the code, rather than hard coded.
Looking at this a bit more, how is the taproot deployment different here from the segwit deployment? AFAICT the segwit height is only used for checking the NeedsRedownload condition, and the purpose of that functionality has been questioned recently too. Can you elaborate on this in the motivation?
Sjors
commented at 9:26 AM on February 24, 2026:
member
@seditedConsensus::DEPLOYMENT_SEGWIT is also used to determine whether a block is allowed to have witness data (IsBlockMutated) and for BIP147. I expanded the PR description.
darosior
commented at 8:08 PM on February 27, 2026:
member
Concept ACK.
I find it confusing that we don't simply make it a buried deployment like we did for the past 5 soft forks. But since we always enforce it from genesis, it would probably be even more confusing (for instance setting -testactivationheight=taproot@42 wouldn't have the intended effect).
Could you update the PR title? There is no Taproot activation height. Maybe "Remove Taproot BIP 9 deployment"?
darosior
commented at 8:14 PM on February 27, 2026:
member
But since we always enforce it from genesis, it would probably be even more confusing (for instance setting -testactivationheight=taproot@42 wouldn't have the intended effect).
I guess it's already equally confusing for -testactivationheight=segwit@42. Oh well..
Sjors renamed this: Remove Taproot activation height Remove Taproot BIP 9 deployment on Feb 28, 2026
in
src/consensus/params.h:31
in
ec17c82846outdated
26 | DEPLOYMENT_HEIGHTINCB = std::numeric_limits<int16_t>::min(),
27 | DEPLOYMENT_CLTV,
28 | DEPLOYMENT_DERSIG,
29 | DEPLOYMENT_CSV,
30 | + // SCRIPT_VERIFY_WITNESS is enforced from genesis, but the check for downloading 31 | + // missing witness data is not. BIP 147 also relies on hardcoded activation height.
ajtowns
commented at 5:20 PM on February 28, 2026:
I think it might be good (not necessarily in this PR) to change VBDeploymentInfo in deploymentinfo.h/cpp to perhaps specify the SCRIPT_VERIFY flags related to a deployment, or to add a std::string with some info about the deployment (EDIT: and to report this information via getdeploymentinfo).
I indeed prefer to leave this for a followup (and as you mention, maybe not needed).
in
src/rpc/blockchain.cpp:1448
in
ec17c82846
1445 | RPCHelpMan getdeploymentinfo()
1446 | {
1447 | return RPCHelpMan{"getdeploymentinfo",
1448 | - "Returns an object containing various state info regarding deployments of consensus changes.",1449 | + "Returns an object containing various state info regarding deployments of consensus changes.\n"1450 | + "Consensus changes for which the new rules are enforced from genesis are not listed here.",
ajtowns
commented at 5:24 PM on February 28, 2026:
Since #32998 we report "script_flags": [ .., "TAPROOT", .. ] via getdeploymentinfo for all blocks except the hardcoded exceptions. I think that's sufficient indication that the soft-fork is still enforced even if it's not listed in the "deployments" section anymore. Maybe this comment would be better phrased as 'are not listed here in "deployments".' ?
ajtowns
commented at 5:38 PM on February 28, 2026:
contributor
ACKec17c82846686cb56da0535051bb701b3c84cfea
DrahtBot requested review from darosior on Feb 28, 2026
DrahtBot requested review from jonatack on Feb 28, 2026
DrahtBot requested review from sedited on Feb 28, 2026
sedited approved
sedited
commented at 12:37 PM on March 1, 2026:
contributor
ACKec17c82846686cb56da0535051bb701b3c84cfea
fanquake added this to the milestone 32.0 on Mar 2, 2026
DrahtBot added the label Needs rebase on Mar 8, 2026
Remove Taproot activation height
Drop DEPLOYMENT_TAPROOT from consensus.vDeployments.
Bump MinBIP9WarningHeight.
Clarify what is considered a BuriedDeployment and
drop taproot from getdeploymentinfo RPC.
Add a test to getblocktemplate to ensure the taproot
rule is still set.
Co-Authored-By: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
74f71c5054
Sjors force-pushed on Mar 10, 2026
Sjors
commented at 3:17 PM on March 10, 2026:
member
This is a metadata mirror of the GitHub repository
bitcoin/bitcoin.
This site is not affiliated with GitHub.
Content is generated from a GitHub metadata backup.
generated: 2026-05-02 18:13 UTC
This site is hosted by @0xB10C More mirrored repositories can be found on mirror.b10c.me