Skip to content

Conversation

@achow101
Copy link
Member

Instead of marking -datacarrier and -datacarriersize options as deprecated, only say that these options are not recommended for use.

While deprecation obviously means that the options are not recommended for use, many users seem to believe that it also means that the options will be imminently removed. My understanding is that there is currently no plan to remove these options in the near future, and I don't think it would be wise to open a PR to remove the options for a few more years. While deprecation certainly does not give a timeline for removal, and the current text is still technically correct, I think that it would be clearer to users to remove the word "deprecated" from the documentation of this option while preserving the non-recommendation.

One thing that could be bikeshed is whether to warn on init if these options are set. IMO we should not have removal warnings if there is no current plan to actually remove them.

@DrahtBot
Copy link
Contributor

DrahtBot commented Jun 10, 2025

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Code Coverage & Benchmarks

For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/32714.

Reviews

See the guideline for information on the review process.

Type Reviewers
ACK l0rinc, maflcko
Concept NACK Sjors, waketraindev, hodlinator, fjahr, instagibbs
Concept ACK jonatack

If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

@maflcko maflcko added the Docs label Jun 10, 2025
@maflcko
Copy link
Member

maflcko commented Jun 10, 2025

lgtm ACK 4f06bf3

Makes sense to go through a normal and proper deprecate-remove cycle over two releases, once, and if there is need to. Otherwise, this may be a situation similar to #29240, where the deprecation warning is meaningless and confusing (because removal is permanently postponed).

[Edit: I assigned the milestone, because this needs to be closed/merged before the milestone.]

@maflcko maflcko added this to the 30.0 milestone Jun 10, 2025
argsman.AddArg("-acceptstalefeeestimates", strprintf("Read fee estimates even if they are stale (%sdefault: %u) fee estimates are considered stale if they are %s hours old", "regtest only; ", DEFAULT_ACCEPT_STALE_FEE_ESTIMATES, Ticks<std::chrono::hours>(MAX_FILE_AGE)), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
argsman.AddArg("-bytespersigop", strprintf("Equivalent bytes per sigop in transactions for relay and mining (default: %u)", DEFAULT_BYTES_PER_SIGOP), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
argsman.AddArg("-datacarrier", strprintf("(DEPRECATED) Relay and mine data carrier transactions (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
argsman.AddArg("-datacarrier", strprintf("Relay and mine data carrier transactions. This option is not recommended for use. (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be easy enough to enumerate the potential degredations of performance here explicitly, no? Should have said this on the other PR, but the notice in general feels weirdly inconsistent to me. Basically all the other policy options have similar effects if they are tightened beyond their defaults too. What makes this one different?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, any suggested wording?

@l0rinc
Copy link
Contributor

l0rinc commented Jun 10, 2025

ACK 4f06bf3

Deprecating seemed premature to me, let's do it in smaller steps to be more aligned with the users.

@Sjors
Copy link
Member

Sjors commented Jun 10, 2025

Concept NACK.

It's fine to add a non-recommendation text, but we should keep the deprecation warning. If by the time we would normally drop a depreceated feature (v31 or v32) there's still a strong risk of brigading, then that's perhaps a political argument for delaying it further, but it's still deprecated.

I don't think the comparison with #29240 is correct here. There the deprecation itself was a mistake, because there were good technical reasons for users to keep using username and password. That's simply not the case here, as evidenced by the need to add non-recommendation text.

Removing the deprecation warning now also means having to repeat the drama when bringing the deprecation back.

@waketraindev

This comment was marked as off-topic.

@hodlinator
Copy link
Contributor

Concept NACK for v30

Noting that this PR is opened on the day after 32406 is merged.

Keeping the settings as deprecated for now means the delta to full removal is smaller, while removing the deprecation increases that delta. I think enough boats have been burned already, let's not re-build them only to burn them again. People implying maliciousness behind the first PR will not suddenly have their confidence restored by this one.

What would change my mind:

  • New/better arguments for using them with non-default values.
  • Enough releases having passed without a push for complete removal.

@fjahr
Copy link
Contributor

fjahr commented Jun 10, 2025

Concept NACK

I personally prefer to keep the deprecation warning as I think all the rationale given (among many other places) here and here points to the fact that it should be removed some time in the future. The fact that outsiders don't understand deprecation and how it is handled in Bitcoin Core is not a strong argument. I am also surprised by this because the original PR that just removed the option outright seemed to have broad support among contributors. I was one of the few reviewers to ask for a deprecation period as far as I can remember.

I have also seen contributors express aversion to revisit this discussion again in the future. This was given as a rationale to not increase the limit in steps as needed by layer 2 protocols but to remove the limit completely, for example. This PR adds another step in the future when we actually want to remove the option. We'll have drama for the deprecation PR and the removal, rather than just the removal as it stand currently.

As others have noted before the deprecation can be walked back any time in the future if there are better reasons for keeping the option in place long term.

@ajtowns
Copy link
Contributor

ajtowns commented Jun 10, 2025

While deprecation obviously means that the options are not recommended for use, many users seem to believe that it also means that the options will be imminently removed.

Given "deprecation obviously means that the options are not recommended for use" I think that trying to differentiate "not recommended for use" and "deprecated" will only lead to more confusion, so I think we should either (a) recommend the option not be used and mark it deprecated; or (b) not mark it deprecated, and leave it up to the user to decide whether to use the option, without making any particular recommendation; and not try (c) some other option to split the non-existent difference. If it were just up to me, I'd choose (b) over (a), but it's not a terribly strong opinion.

My understanding is that there is currently no plan to remove these options in the near future, and I don't think it would be wise to open a PR to remove the options for a few more years.

Both -datacarrier and -datacarriersize options have been marked as deprecated and are expected to be removed in a future release. (#32406)`

InitWarning(_("Options '-datacarrier' or '-datacarriersize' are set but are marked as deprecated. They will be removed in a future version."));

I think various contributors would like to remove the options in the near future, and both marking the option as deprecated and having explicit warnings about the feature being removed on startup and in the release notes lends support to those opinions. I also think it's hard to justify keeping around an option that we recommend nobody use for a long period of time.

Personally, I think it would make more sense to take the following approach:

  • decide what we think the default behaviour should be (ie, relay/mine txs with an arbitrary number of OP_RETURN outputs, of arbitrary length)
  • determine if enough users seem interested in alternative behaviours to justify providing/maintaining a runtime configuration option (sure seems like there are)
  • observe if that configuration option is useful in practice on the network (ie, some level of hashpower actually changes from the default behaviour -- not observable at the moment because the new default behaviour isn't even available in released software)
    • if 99.9% of hashpower (or some other number) seems satisfied with the default behaviour, remove the option, possibly with a deprecation period
    • on the other hand, if a majority of hashpower (or plurality?) is using some different behaviour to our default, even after a release with the new default has been out for some time, seriously consider changing our defaults to match that behaviour

Taking that approach would mean not deprecating the option until after a release with the new default has been out for some time.

Copy link
Member

@jonatack jonatack left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Concept ACK, modulo the following

I think we should either (a) recommend the option not be used and mark it deprecated; or (b) not mark it deprecated, and leave it up to the user to decide whether to use the option, without making any particular recommendation; and not try (c) some other option to split the non-existent difference. If it were just up to me, I'd choose (b) over (a), but it's not a terribly strong opinion.

Agree with @ajtowns.

argsman.AddArg("-acceptstalefeeestimates", strprintf("Read fee estimates even if they are stale (%sdefault: %u) fee estimates are considered stale if they are %s hours old", "regtest only; ", DEFAULT_ACCEPT_STALE_FEE_ESTIMATES, Ticks<std::chrono::hours>(MAX_FILE_AGE)), ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
argsman.AddArg("-bytespersigop", strprintf("Equivalent bytes per sigop in transactions for relay and mining (default: %u)", DEFAULT_BYTES_PER_SIGOP), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
argsman.AddArg("-datacarrier", strprintf("(DEPRECATED) Relay and mine data carrier transactions (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
argsman.AddArg("-datacarrier", strprintf("Relay and mine data carrier transactions. This option is not recommended for use. (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
Copy link
Member

@jonatack jonatack Jun 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer dropping the extra recommendation sentence for each of these.

Suggested change
argsman.AddArg("-datacarrier", strprintf("Relay and mine data carrier transactions. This option is not recommended for use. (default: %u)", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);
argsman.AddArg("-datacarrier", strprintf("Relay and mine data carrier transactions (default: %u).", DEFAULT_ACCEPT_DATACARRIER), ArgsManager::ALLOW_ANY, OptionsCategory::NODE_RELAY);

@glozow glozow requested a review from instagibbs June 10, 2025 18:25
@instagibbs
Copy link
Member

concept NACK, seems needless churn to me to backtrack on something a number of original reviewers(and author himself) disagree with

As per @ajtowns if miners end up over-riding the value a lot, we can rethink deprecation. I don't think removing deprecation now makes anything clearer.

Copy link
Member

@glozow glozow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm all for explaining more clearly what the status of these config options it. But it seems like we're removing the "vegetarian" label from a menu item because people misinterpreted it and are upset that it contains eggs. We should keep the vegetarian label and just elaborate "this has no meat, but does contain eggs."

Also, I think it'd be fine to leave the option for more than 1-2 release cycles before removal.

@@ -1,3 +1,3 @@
- `-datacarriersize` is increased to 100,000 which effectively uncaps the limit (as the maximum transaction size limit will be hit first). It can be overridden with -datacarriersize=83 to revert to the limit enforced in previous versions. Both `-datacarrier` and `-datacarriersize` options have been marked as deprecated and are expected to be removed in a future release. (#32406)
- `-datacarriersize` is increased to 100,000 which effectively uncaps the limit (as the maximum transaction size limit will be hit first). It can be overridden with -datacarriersize=83 to revert to the limit enforced in previous versions. Both `-datacarrier` and `-datacarriersize` options are not recommended to be used, and may be removed in a future release, after a deprecation warning. (#32406)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do prefer "are not recommended to be used" more than "have been marked as deprecated" as it explains it more clearly to the user. However, discouragement is deprecation, it's weird to say "after a deprecation warning."

@achow101 achow101 closed this Jun 10, 2025
@fanquake fanquake removed this from the 30.0 milestone Jun 18, 2025
achow101 added a commit that referenced this pull request Sep 30, 2025
…guration options

451ba9a datacarrier: Undeprecate configuration option (Anthony Towns)

Pull request description:

  Removes the deprecation for the `datacarrier` and `datacarriersize` options by reverting commit 0b4048c from #32406

  **Many current Bitcoin Core users want to continue using this option**
  This statement is based on public postings from many Bitcoin Core users and not a formal survey. AJ Towns’ observation from [#32406](0b4048c#r2084024874) that “_for now there seem to be a bunch of users who like the option_” has only become more apparent in the months since.

  **The deprecation intent is unclear to users**
  This echo’s Ava Chow’s comment from #32714 that “_IMO we should not have removal warnings if there is no current plan to actually remove them._” In months since that comment, partially due to increased feedback from Bitcoin Core users wanting to keep this option, there is even less likelihood of a near term plan to remove these options. That leaves Bitcoin Core users in an unclear situation: the option could be removed in the next version or perhaps never. Removing the deprecation gives clarity for their planning purposes. Deprecating the option in the future, preferably with a removal schedule to better inform users, would still be possible.

  **Minimal downsides to removing deprecation**
  As a best practice, Bitcoin Core has avoided an option when the developers cannot articulate when they should be used. There is non-zero maintenance cost to keeping this code around (although leaving the options deprecated for a long time has the same effect). “Don’t offer users footguns” is also a good principle, but with this option, there seems to be only small impacts that can quickly be remedied by changing the option value by Bitcoin Core users. There already exist in Bitcoin Core more potentially-user-harmful options/values than what datacarrier might cause.

ACKs for top commit:
  ajtowns:
    ACK 451ba9a
  darosior:
    That said, certain users care strongly about using those options. In these conditions, i do not see the project removing the option anytime soon. Therefore i think it's technically incorrect (and confusing) to mark it as deprecated. utACK 451ba9a on removing the deprecation.
  instagibbs:
    crACK 451ba9a
  Raimo33:
    ACK 451ba9a
  Ademan:
    utACK 451ba9a
  ryanofsky:
    Code review ACK 451ba9a
  marcofleon:
    ACK 451ba9a
  achow101:
    ACK 451ba9a
  moonsettler:
    ACK 451ba9a
  ismaelsadeeq:
    utACK 451ba9a 🛰️
  jonatack:
    ACK 451ba9a
  Zero-1729:
    crACK 451ba9a
  vasild:
    ACK 451ba9a

Tree-SHA512: b83fc509f5dd820976596e1ae9fb69a22ada567e0e0ac88da5fc5e940a46d8894b40cc70c3eff2cbdabd4da5ec913f0d18c1632fc906f210b308855868410699
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.