Add a configuration option -permitrbf to set transaction replacement policy for the mempool.
Enabling it will enable (opt-in) RBF, disabling it will refuse all conflicting transactions.
Add a configuration option -permitrbf to set transaction replacement policy for the mempool.
Enabling it will enable (opt-in) RBF, disabling it will refuse all conflicting transactions.
utACK
utACK
utACK
0.12 release notes will need mention of this option.
utACK
Add a configuration option `-permitrbf` to set transaction replacement policy
for the mempool.
Enabling it will enable (opt-in) RBF, disabling it will refuse all
conflicting transactions.
106 | @@ -107,6 +107,8 @@ static const bool DEFAULT_TXINDEX = false; 107 | static const unsigned int DEFAULT_BANSCORE_THRESHOLD = 100; 108 | 109 | static const bool DEFAULT_TESTSAFEMODE = false; 110 | +/** Default for -permitrbf */ 111 | +static const bool DEFAULT_PERMIT_REPLACEMENT = true;
I think the default value should be false, as many pool owners are too lazy to change the default.
RBF is opt-in and I think this feature should be enabled by default.
I think default false is better at this moment. But I don't really care local policy, anyway
This option is added for people who explicitly care to disable it. They won't be too lazy to set it.
For those who don't care this feature, the software should work as it was in the old version.
Users who wish to use opt-in need to be able to dynamically increase fees. They don't hurt anyone by that, especially not miners who get the larger fee.
They already have to take the conscious decision to upgrade to 0.12, which introduces lots of new behavior. Some of that can be disabled using options.
Then it might be safer to have opt-in fss rbf by default, and rbf tx should be relayed on the network regardless of the value this parameter.
ACK
Well it might be not very easy to relay something that is not going to be accepted in mempool. But this patch is better than nothing.
This has been called "opt-in" RBF, if that is the case then should it not actually be opt-in rather than opt-out? I'd like to see the default set to false at least for the 12.0 release.
@ChainQuery It's opt-in for users.
Please don't confuse ...
-permitrbf is a configuration value that allows accepting such replacement-transaction into the nodes mempool@ChainQuery To the best of my knowledge no wallet has opted in to use rbf, yet. (Not even Bitcoin Core)
@sipa @MarcoFalke Fair enough, I do appreciate the addition of the -permitrbf option.
I would like to see it with default false, for just upgrading users which are not well informed its the more safe version.
+1 for default false to enhance its opt-in quality.
@kristovatlas Turning it off would remove people's ability to use it; exactly the opposite of your suggestion.
@gmaxwell it would only degrade users' ability to use it if node operators don't want to turn it on.
Since Bitcoin Core is sensitive to contentious changes, and since Opt-In RBF is contentious, I think the default should be the least contentious option for the sake of consistency.
For those politically minded, this would also contribute into a small way to the perception that Core is responsive to the desires of major businesses in the space.
@kristovatlas there is a PR for this: #7388
@kristovatlas This is not a consensus rule, so you're free to choose a different setting than the default here.
As I've said on the PR being linked to, I'm certainly willing to consider changing the default if there is controversy about it. But can someone at least point out one service or wallet that is not dealing with this correctly and has no plans to do so in the near future?
Since Bitcoin Core is sensitive to contentious changes
No, we avoid contentious consensus rule changes (e.g. hardforks); because no one can choose to avoid the consensus behavior of the network around them. Please don't mix up totally local behavior from the blockchain consensus rules.
Adding an option here-- even though there isn't any rational given to any of the opposition to restoring the original Bitcoin 0.1 functionality for people to choose to consequentially produce non-final transactions was already a purely political response to those desires. The continued attacks in spite of making that requested, but otherwise illogical, accommodation suggests that the complaining parties are not interested in a civilized dialog.
utACK
RBF should not be in the code base at all. With that said, default should be no RBF at all. That also means no relaying and mining of RBF transactions.
utACK b768108, happy with default true.
utACK b768108. This is not controversial because it is not changing behavior of existing 0.12.0rc1 nodes.
If someone feels like changing the default for 0.12.1 or 0.13, a separate pull might be appropriate as introducing new features and discussion about changing the behavior should be split in most cases.
RBF should not be in the code base at all. With that said, default should be no RBF at all. That also means no relaying and mining of RBF transactions.
It's too late for that. Opt-in RBF is well-deliberated progress, not a random spur of the moment change. The RBF discussion has been going on for years, almost since the beginning of bitcoin, this was eventually the best compromise. For wallets, RBF is the solution to transactions stuck because they have attached too little fee (a very common complaint). And it is non-coercive in any way: Users can opt-in to send their transactions with RBF, or not. Receivers can see if a transaction opts in to RBF (#7222).
This is not controversial because it is not changing behavior of existing 0.12.0rc1 nodes.
The behaviour of 0.12.0rc1 nodes are controversial.
The behaviour of 0.12.0rc1 nodes are controversial.
Can you explain who is hurt by it?
It's too late for that.
Guess the community have to run Bitcoin Classic then.
For wallets, RBF is the solution to transactions stuck because they have attached too little fee (a very common complaint).
If we increase the blocksize this would not be a problem.
And it is non-coercive in any way
People accepting 0-conf would like to continue to do that.
@sandakersmann I don't think this is the proper location to discuss RBF per se. This is about the switch
Can you explain who is hurt by it?
Merchants.
Tested ACK b768108
I don't think this is the proper location to discuss RBF per se.
Ok. I will go away now.
ACK https://github.com/laanwj/bitcoin/commit/b768108d9c0b83330572711aef1e569543130d5e
But yes, we should announce such changes one version before it is actually done. I.e. some form of release plan.
@sandakersmann if you think it's worth while bringing up, feel free to make a PR that changes the default, however, I suspect all relevant points have been raised in this PR.
WTF!? Did this get merged after just 3 hours and all the people that said that default should be false!
@sandakersmann RBF was already enabled by default in 0.12.
To change the default now would mean to change expected behaviour for 0.12, therefore, this could be merged without breaking expectations.
If you (and others) think the default should be changed, its probably best to set it up in a new PR which targets 0.13.
At least, that is my impression, @laanwj 0.12 has been set in stone now right?
ACK
366 | @@ -367,6 +367,7 @@ std::string HelpMessage(HelpMessageMode mode) 367 | strUsage += HelpMessageOpt("-onion=<ip:port>", strprintf(_("Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: %s)"), "-proxy")); 368 | strUsage += HelpMessageOpt("-onlynet=<net>", _("Only connect to nodes in network <net> (ipv4, ipv6 or onion)")); 369 | strUsage += HelpMessageOpt("-permitbaremultisig", strprintf(_("Relay non-P2SH multisig (default: %u)"), DEFAULT_PERMIT_BAREMULTISIG)); 370 | + strUsage += HelpMessageOpt("-permitrbf", strprintf(_("Permit transaction replacement (default: %u)"), DEFAULT_PERMIT_REPLACEMENT));
Nit: Maybe "Permit transaction replacement_s in the memory pool_"?
Agreed on nit
Enabling it will enable (opt-in) RBF, disabling it will refuse all conflicting transactions. @laanwj Given the circumstances, the language for this configuration option is a bit confusing. Did you consider naming the option "-disablerbf" with a default setting of false?
@bitcartel that is true, this probably should have been a --disable-rbf flag if the default was to be true. As it stands, it reads more like a default to false is expected.
Defaults change over time. You cannot infer the default sense from the name of parameter.
Changing the parameter name would silently override people's explicit configuration and invalidate documentation.
@gmaxwell it would force their explicit configuration to fail loudly [assuming deprecated/invalid parameters are rejected]. I think the invalidation of the documentation is reflective of the change, and is representative of the fact that changing the defaults should be painful because it breaks an understanding with users who omitted those options based on their defaults being what they expect.
@laanwj Given the circumstances, the language for this configuration option is a bit confusing. Did you consider naming the option "-disablerbf" with a default setting of false?
You can already do this, for every boolean parameter: -nopermitrbf.