Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove -mempoolfullrbf option #26525

Conversation

BitcoinErrorLog
Copy link

Reverts #25353.

I am submitting this PR after many discussions with users, merchants, and Bitcoin Core developers.

They agree that the nuances of first-seen, full RBF, and zero-conf interactions are significant and controversial, and that given the current state of the discussion, and that full RBF may not solve the DoS issues that inspired it, the original PR would not have been merged in the first place.

I believe we should leave first-seen mempool policy intact. The arguments for this include miner incentive compatibility, maximization of fees per block through next-block priority-competition, utility for merchants and consumers, intelligent double-spend risk mitigation, protection of the user space, and optimization of Bitcoin adoption, utility, and activity.

I apologize for not yet having a reference link with full details of all of my arguments, but I am happy to interact with commenters on any arguments for a full RBF agenda here. I can also alleviate any concerns with current zero-conf acceptance risk mitigation.

I would appreciate being heard, and having a fair chance to be reviewed and considered.

I also need time for consideration because I am assisting some merchants and users with understanding how to interface with Bitcoin Core and what is happening, so they can express their support for this PR, and their value of zero-conf being useful as a service.

In the end, I am advocating for the Bitcoin network state that has thrived for its entire history so far, and asking that Bitcoin Core avoid steering policy.

@DrahtBot
Copy link
Contributor

DrahtBot commented Nov 17, 2022

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

Reviews

See the guideline for information on the review process.

Type Reviewers
Concept NACK luke-jr, TrAyZeN, instagibbs, jnewbery, prusnak, Zero-1729, michaelfolkson, brunoerg, stickies-v, aureleoules, zndtoshi, SkanderHelali, nvk, acidtib, josibake, mzumsande, vostrnad, reardencode, ghost, ZenulAbidin, kaloudis, greenaddress, petertodd
Concept ACK ziggamon, MiguelMedeiros, coreyphillips, Tigerix, proofofjogi, artdesignbySF, Transisto, shreyanjoshi, jayt87, krotkiewicz, sarafshailesh, greedyradar, benpbolton, tiero, jaredcobb, bitcoinheiro, SeverinAlexB, TheGuySwann, felcreate, ursuscamp, iBeizsley, i5hi, hsjoberg

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

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #28132 (policy: Enable full-rbf by default by petertodd)
  • #28130 (Remove arbitrary restrictions on OP_RETURN by default by petertodd)
  • #27832 (doc: Clarify -datacarriersize, add -datacarriersize=2 tests by MarcoFalke)
  • #26451 (Enforce incentive compatibility for all RBF replacements by sdaftuar)

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.

@luke-jr
Copy link
Member

luke-jr commented Nov 17, 2022

NACK. We've been over this already too many times.

asking that Bitcoin Core avoid steering policy.

Steering policy is exactly what this PR does.

@TrAyZeN
Copy link

TrAyZeN commented Nov 17, 2022

NACK

@instagibbs
Copy link
Member

We had copious amounts of debate already, status quo reigns

NACK

@maflcko
Copy link
Member

maflcko commented Nov 17, 2022

My personal preference would have been to release 24.0 with something like #26456, but given that this was too controversial, and given that 24.0 is already released, I don't think it makes sense to rehash the discussion right now.

Have you seen the previous discussion, for example #26438 (comment)? I don't think there are any new arguments at the current time that would warrant a rehash.

@jnewbery
Copy link
Contributor

NACK. Everyone has had a fair chance to express their opinions in #26438. Nothing has changed since then. Let's not rehash the same arguments here.

@ziggamon
Copy link

ACK

The network is unprepared for this behavior change.

In the recent massive mempool spike less than 1% of transactions caught under it successfully used the RBF option to bump their transaction, despite 20-30% of them signalling the opt-in flag. See https://twitter.com/0xb10c/status/1592603590941880320?s=46&t=xkVv8ULO1nE8Q9vOd-WSeA

https://twitter.com/ziggamon/status/1592613046421426179?s=46&t=xkVv8ULO1nE8Q9vOd-WSeA

If this flag gets used by a subset of nodes or miners we will end up in a worst-of-both worlds scenario where some current modes of using bitcoin break, while no recourses become available to vast majority users.
If RBF was widely used across different parts of the stack of things making bitcoin transactions that might have been a different story, but so far the market is clearly not selecting RBF, so forcing it on those who don’t is unlikely to create any of the benefits sought.
Compare with fee estimation which is roughly equally old in bitcoin, but is used by the vast majority of transactions, to navigate the unpredictible blockspace market.

i agree with john that it’s worth reconsidering this.

@BitcoinErrorLog
Copy link
Author

Steering policy is exactly what this PR does.

Gaslight. The current state of the Bitcoin network uses first-seen. I am arguing to keep that state intact.

@BitcoinErrorLog
Copy link
Author

BitcoinErrorLog commented Nov 17, 2022

We had copious amounts of debate already, status quo reigns

Your definition of status quo has not been adopted by users yet. They have not been heard or fairly considered.

@BitcoinErrorLog
Copy link
Author

BitcoinErrorLog commented Nov 17, 2022

24.0 is already released, I don't think it makes sense to re-hash the discussion right now.

Have you seen the previous discussion, for example #26438 (comment)?

The release schedule for Core is not an actual deadline or proof of consensus by users, who were not heard.

Yes, I am aware of, and participated in the previous discussion to remove this feature, which was ack'd by Antoine Raird, the author of the feature, and, in my opinion, prematurely closed by Suhas after brigading/bullying.

I would appreciate giving Suhas the chance to reconsider as well.

@prusnak
Copy link
Contributor

prusnak commented Nov 17, 2022

Duplicate of #26438

NACK

@BitcoinErrorLog
Copy link
Author

BitcoinErrorLog commented Nov 17, 2022

NACK. Everyone has had a fair chance to express their opinions in #26438. Nothing has changed since then. Let's not rehash the same arguments here.

I stated what has changed: Full RBF does not remove DoS issues, the author of the feature is willing to remove it, and the community is more educated and looking for a way to express support for the live network state.

I also have new arguments about incentive compatibility in that first-seen policy facilitates a priority competition for next-block inclusion because merchants require market fee rate to qualify for zero-conf.

This priority competition, combined with traditional RBF, may explain the current stasis of the network, as it provides full-spectrum fee saturation for both immediate and eventual block inclusion.

@Zero-1729
Copy link
Contributor

NACK

Already been through this.

@luke-jr
Copy link
Member

luke-jr commented Nov 17, 2022

The current state of the Bitcoin network uses first-seen. I am arguing to keep that state intact.

No, that isn't the current state, and hasn't been for years. Besides, keeping the state intact would still be steering anyway.

@BitcoinErrorLog
Copy link
Author

No, that isn't the current state, and hasn't been for years. Besides, keeping the state intact would still be steering anyway.

More gaslight. Maybe it would be more productive to argue what full RBF solves, why it requires the assistance of this new feature, and why these are worth disrupting a useful use case of merchants for users.

@luke-jr
Copy link
Member

luke-jr commented Nov 17, 2022

You are the one gaslighting. Full RBF is not new, and does not disrupt anything.

@sipa
Copy link
Member

sipa commented Nov 17, 2022

No need to rehash this discussion.

@ftrader
Copy link

ftrader commented Nov 17, 2022

Hey @ziggamon , if you want to have some leverage on this issue, perhaps you should consider accepting Bitcoin Cash through 0-conf on Bitrefill.

With Double Spend Proofs your company could showcase how quick and easy Bitcoin payments can be.

@BitcoinErrorLog
Copy link
Author

No need to rehash this discussion.

I would sincerely appreciate your argument as to why a full-RBF agenda should be steered by Bitcoin Core at the cost of the existing user space, as well as your refutation of any of my arguments within.

@michaelfolkson
Copy link
Contributor

NACK

1 similar comment
@brunoerg
Copy link
Contributor

NACK

@MiguelMedeiros
Copy link

ACK

@ayesaac
Copy link

ayesaac commented Nov 17, 2022

Outsider/user-only perspective: I don't feel strongly about the option existing or not existing, but I'm dubious about the reasoning behind full-RBF. First hearing about this controversy, my knee-jerk reaction was "the mempool can't be trusted; that's why we need PoW at all", but having given it further thought:

  1. Yes, accepting unconfirmed transactions is, and always has been, risky. I wouldn't do it myself. But it's not my place, or the place of anyone else, to prevent, or even 'disincentivise', others making that choice. If they choose to accept an unconfirmed transaction and get double-spent, they're only hurting themselves.
  2. Users not knowing about RBF and ending up with a non-RBF TX stuck in the mempool for a long time is not a Bitcoin Core concern. It's a wallet concern. Wallets should flag RBF by default, or explicitly ask the user what they want per TX/on initialization.
  3. Users accepting unconfirmed transactions unwittingly aren't going to be prevented from doing so by full RBF. Again, wallet space.

I've not really heard any other arguments, besides mempool-split brain and issues w/ CoinJoin & multiparty contracts, but it doesn't seem full-RBF actually fixes that.

Besides that, no, an unreleased piece of code is not 'status quo'. It's true that replacement of non-RBF transactions is already possible, but making it far easier with full-RBF is objectively not 'maintaining the status quo'.

More than happy to hear other justifications for it. If there's an actual tehcnical benefit to full-RBF, then we should adopt it by default. But honestly this whole thing feels quite political.

Edit: And to add, I think making it a concern of Bitcoin core to 'disincentivise unsafe behaviour' is a huge mistake. It's taking on an additional responsibility you simply do not have at the moment, with potentially unlimited scope.

@cculianu
Copy link

"Never interrupt your adversaries when they are busy making a mistake." --Sun Tzu

As a Bitcoin Cash developer I must say you should definitely leave RBF in and what's more definitely make it the default and in fact maybe even do a relay rule that forbids any TXN without that flag. I think that's what you guys should definitely be doing!

@coreyphillips
Copy link

ACK. There is no benefit or technical reason for the switch to full rbf. Understanding that this has been discussed ad-nauseam, it's still worth pointing out and defending that changing params without technical reason should not be considered acceptable nor should it become an acceptable standard.

@MiguelMedeiros
Copy link

Outsider/user-only perspective: I don't feel strongly about the option existing or not existing, but I'm dubious about the reasoning behind full-RBF. First hearing about this controversy, my knee-jerk reaction was "the mempool can't be trusted; that's why we need PoW at all", but having given it further thought:

  1. Yes, accepting unconfirmed transactions is, and always has been, risky. I wouldn't do it myself. But it's not my place, or the place of anyone else, to prevent, or even 'disincentivise', others making that choice. If they choose to accept an unconfirmed transaction and get double-spent, they're only hurting themselves.
  2. Users not knowing about RBF and ending up with a non-RBF TX stuck in the mempool for a long time is not a Bitcoin Core concern. It's a wallet concern.
  3. Users accepting unconfirmed transactions unwittingly aren't going to be prevented from doing so by full RBF. Again, wallet space.

I've not really heard any other arguments, besides mempool-split brain and issues w/ CoinJoin & multiparty contracts, but it doesn't seem full-RBF actually fixes that.

Besides that, no, an unreleased piece of code is not 'status quo'. It's true that replacement of non-RBF transactions is already possible, but making it far easier with full-RBF is objectively not 'maintaining the status quo'.

More than happy to hear other justifications for it. If there's an actual tehcnical benefit to full-RBF, then we should adopt it by default. But honestly this whole thing feels quite political.

I couldn't agree more with your arguments @iBeizsley .

The part that bothers me the most is seeing the core developers thinking they have to defend users from their own stupidity and claiming it as 'maintaining the status quo' and it's the exact opposite.

I saw many fallacies of: authority, straw man, ad hominem, generalization, etc. Therefore, I recommend rejecting any changes a priori, until this is truly a consensus, as there is no benefit or technical reason for moving to full rbf. I also note that this topic is very political and not very technical.

@aureleoules
Copy link
Member

aureleoules commented Nov 17, 2022

NACK

That's one way to stress-test the new ACK tracker.

@Tigerix
Copy link

Tigerix commented Nov 17, 2022

ACK
I am user!
No need to destroy the UX of Bitcoin with Full-RBF by doing so in the name of "Security".

@luke-jr
Copy link
Member

luke-jr commented Nov 17, 2022

The part that bothers me the most is seeing the core developers thinking they have to defend users from their own stupidity

Strange comment, when it's this PR that aims to remove user choice in the name of defending users(deluded merchants).

@ajtowns
Copy link
Contributor

ajtowns commented Mar 17, 2023

this PR proposes deleting an option that .. (2) does no harm to the node operator.

This isn't true. Running a non-default mempool makes it easier to put different txs in your mempool compared to the majority of the network, which:

  • makes it easier to fingerprint your node and its network peers
  • creates pinning vectors
  • can allow your counterparties to hide unconfirmed payments to you or hide double-spends of payments to you
  • lowers the effectiveness of compact block relay

A node operator may well decide that they aren't concerned about any of those drawbacks, or that the benefits outweigh the harm/risks, of course, but it's not true that there is no harm.

Looking through fullrbf.mempool.observer's data, the first page currently has 23 "replaced" txs mined, compared to 3 replacement txs (one of which was itself replaced). Of the three "replacements" that were mined, two of them replaced txs that were only in the fork.observer mempool for 2 or 3 seconds, and never made it to my mempool. The other tx (0ac289b3058bc6a09e071e91496361b2562e792fe878802142ce81c3a60386af) replaced its predecessor 18 minutes after the predecessor was first broadcast upping the feerate from 4.58sat/vb to 24.05sat/vb, but only improved its confirmation time by ~10 minutes. The vast majority of "fullrbf" txs on pages 1-9 that have been mined are ones that were replaced after expiring from the default mempool, so did not take advantage of the fullrbf logic at all. Of the remainder, almost all seem to be opentimestamps transactions mined by Luxor.

There's also been a lot of stale blocks recently, with fork.observer reporting two in the last couple of days (780979 and 780994) and nine in total over the last 5 months (since October when this was available in rcs). That's a lot compared to the previous 5 months in which there were zero stale blocks (21 May to 21 Oct), but it may just be seasonal, as the 7 months prior to that had 12 stale blocks (21 Oct 2021 to 20 May 2022).

@petertodd
Copy link
Contributor

@ajtowns

this PR proposes deleting an option that .. (2) does no harm to the node operator.

This isn't true. Running a non-default mempool makes it easier to put different txs in your mempool compared to the majority of the network, which:

* makes it easier to fingerprint your node and its network peers

How specifically does turning on full-rbf enable that attack?

* creates pinning vectors

Can you explain what exactly you mean by this in the context of full-rbf?

* can allow your counterparties to hide unconfirmed payments to you

Why is the deliberate hiding of unconfirmed payments to you even a problem?

or hide double-spends of payments to you

How does turning on full-rbf make it easier to hide double-spends of payments to you? Note that BTCPay now turns full-rbf on by default in their docker image, specifically because it makes it marginally more likely for you to notice a double-spend.

* lowers the effectiveness of compact block relay

You seem to be arguing two contradictory things: full-rbf isn't used, and yet it also materially lowers the effectiveness of compact block relay.

A node operator may well decide that they aren't concerned about any of those drawbacks, or that the benefits outweigh the harm/risks, of course, but it's not true that there is no harm.

Looking through fullrbf.mempool.observer's data, the first page currently has 23 "replaced" txs mined, compared to 3 replacement txs (one of which was itself replaced). Of the three "replacements" that were mined, two of them replaced txs that were only in the fork.observer mempool for 2 or 3 seconds, and never made it to my mempool. The other tx (0ac289b3058bc6a09e071e91496361b2562e792fe878802142ce81c3a60386af) replaced its predecessor 18 minutes after the predecessor was first broadcast upping the feerate from 4.58sat/vb to 24.05sat/vb, but only improved its confirmation time by ~10 minutes.

Note that fullrbf.mempool.observer has not been working for at least the past two weeks.

The vast majority of "fullrbf" txs on pages 1-9 that have been mined are ones that were replaced after expiring from the default mempool, so did not take advantage of the fullrbf logic at all. Of the remainder, almost all seem to be opentimestamps transactions mined by Luxor.

Can you give examples of these transactions that you claim were expired? By expiring, to be clear, you mean expiring due to the expiration time being reached? Because that would be a transaction previously broadcast two weeks prior, and I'm not aware of any such examples.

There's also been a lot of stale blocks recently, with fork.observer reporting two in the last couple of days (780979 and 780994) and nine in total over the last 5 months (since October when this was available in rcs). That's a lot compared to the previous 5 months in which there were zero stale blocks (21 May to 21 Oct), but it may just be seasonal, as the 7 months prior to that had 12 stale blocks (21 Oct 2021 to 20 May 2022).

@1440000bytes's plot of stale blocks doesn't show any clear link to anything.

Anyway the data from miningpool.observer/template-and-block shows that blocks routinely include a dozen or so unexpected transactions. It's not clear if those are transactions not in miningpool.observer's mempoo, and thus relevant to compact blocksl; @0xB10C, can you clarify this point?

@petertodd
Copy link
Contributor

@ariard

  • I think the conciliation of the 0confs use-case with new policy regime like nversion=3 has not been very discussed (e.g I believe 0conf software might have to upgrade themselves to reject future nversion=v3 transactions).

To be clear, 0conf users have to "upgrade" every single time mempool policies/conditions change for any non-trivial amount of hashing power. Pretty much any mempool policy change can be exploited to double-spend unconfirmed transactions. That's why the only entities with any hope of relying on them are large, centralized, transaction processors with significant engineering resources. The nVersion=3 proposal is not special in this regard.

I'm not aware of any "end-user" wallet that even bothers to make it clear to users if BIP-125 RBF is enabled. It'd just give a false sense of security.

@0xB10C
Copy link
Contributor

0xB10C commented Mar 30, 2023

Anyway the data from miningpool.observer/template-and-block shows that blocks routinely include a dozen or so unexpected transactions. It's not clear if those are transactions not in miningpool.observer's mempoo, and thus relevant to compact blocksl; @0xB10C, can you clarify this point?

Transactions listed under "Extra Transactions" are transactions that weren't in my mempool but the pool knew about. These are transactions my node would have to learn about with either (prefilledtxn in HeaderAndShortIDs) or request (getblocktxn) when learning about new compact block.

https://fullrbf.mempool.observer is back up (there were only a few requests per day and I needed the a node to run a different branch for a few days). Fwiw there's also https://fullrbf.mempool.observer/no_opreturn/ listing no OP_RETURN and thus no opentimestamps replacements. Also happy to provide 'historical' data on the transaction replacements for this fullrbf node (i.e. this txhex was replaced by this other txhex).

@petertodd
Copy link
Contributor

Anyway the data from miningpool.observer/template-and-block shows that blocks routinely include a dozen or so unexpected transactions. It's not clear if those are transactions not in miningpool.observer's mempoo, and thus relevant to compact blocksl; @0xB10C, can you clarify this point?

Transactions listed under "Extra Transactions" are transactions that weren't in my mempool but the pool knew about. These are transactions my node would have to learn about with either (prefilledtxn in HeaderAndShortIDs) or request (getblocktxn) when learning about new compact block.

Right, so I'd be correct in saying that based on blocks from all mining pools generally containing about a dozen Extra Transactions on your miningpool.observer site, blocks generally contain about a dozen transactions not previously broadcast that compact blocks can't accellerate.

Thus, full-rbf usage has absolutely nothing to do with propagation, as far more transactions get missed by compact blocks anyway.

https://fullrbf.mempool.observer is back up (there were only a few requests per day and I needed the a node to run a different branch for a few days). Fwiw there's also https://fullrbf.mempool.observer/no_opreturn/ listing no OP_RETURN and thus no opentimestamps replacements. Also happy to provide 'historical' data on the transaction replacements for this fullrbf node (i.e. this txhex was replaced by this other txhex).

Thanks.

It looks like https://fullrbf.mempool.observer is missing significant #'s of full-rbf replacements. All the recent ones on https://alice.btc.calendar.opentimestamps.org are not showing up. You may have a propagation issue - I would suggest running the full-rbf peering patch if you are not already: https://github.com/petertodd/bitcoin/tree/full-rbf-v24.0.1

@ajtowns
Copy link
Contributor

ajtowns commented Apr 7, 2023

Right, so I'd be correct in saying that based on blocks from all mining pools generally containing about a dozen Extra Transactions on your miningpool.observer site, blocks generally contain about a dozen transactions not previously broadcast that compact blocks can't accellerate.

No, you wouldn't. Of the last 460 blocks, 375 (81%) required no additional txs, and an additional 67 (14%) required only one or two additional transactions. All of the 8 Luxor pool blocks in that set required between one and three extra transactions.

Most of the "extra" transactions miningpool.observer reports are just ones that its template dropped because they were at the bottom of the block, and were pushed out because of high fee rate transactions that are marked as "young".

That said, a couple of extra transactions make negligible difference as far as I've observed. I see 393 instances (86%) where the block was reconstructed within the same second with between 0 and 10 txs requested, and 59 instances (12%) where block reconstruction happened in the following second (I don't have sub-second precision in my logs) with between 0 and 325 txs requested. An additional 5 blocks took between 2 and 4 seconds before the block was reassembled, with between 3 and 3528 txs requested, and a single outlier block, 784173, that took 37 seconds to be reconstructed with 109 txs requested, because the peer my node requested the txs from was slow to respond.

Thus, full-rbf usage has absolutely nothing to do with propagation, as far more transactions get missed by compact blocks anyway.

Fullrbf transactions currently have near zero relay impact because they currently have near zero usage, there's no additional explanation necessary.

@petertodd
Copy link
Contributor

FYI it appears that in addition to Luxor, AntPool and possibly one or two other pools are mining full-rbf replacements now with at least some of their hashing power. Wasabi also recently had a double-spend that would have been resolved with full-rbf, exactly as I and others have been arguing. Binance also appears to be doing full-rbf replacements to bump-fees on their consolidation transactions. And finally, myNode has enabled this flag by default.

Obviously, mempoolfullrbf is getting a lot of usage. Removing it would be clearly taking away a useful feature used by many.

@ariard
Copy link
Member

ariard commented Jun 5, 2023

To be clear, 0conf users have to "upgrade" every single time mempool policies/conditions change for any non-trivial amount of hashing power. Pretty much any mempool policy change can be exploited to double-spend unconfirmed transactions. That's why the only entities with any hope of relying on them are large, centralized, transaction processors with significant engineering resources. The nVersion=3 proposal is not special in this regard.

Not all the mempool policies/condition changes are equal in term of practicality of exploitation. The question is more if in the future policy change like nVersion=3 should be announced as they might have disruptive effects on end-users and second-layers, hard to foresee from Bitcoin Core usual set of contributors. See has been discussed in the past on the mailing list: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-September/019421.html

Obviously, mempoolfullrbf is getting a lot of usage. Removing it would be clearly taking away a useful feature used by many.

To satisfy the needs of 0confs users (which encompass 0confs LN channels), a mempool monitoring protocol could be deployed, where nodes are relaying to each other replacements and clients are subscribing to UTXOs of interest. A transaction-relay network over Nostr as presented here could be a good fit: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2023-May/021700.html

@petertodd
Copy link
Contributor

petertodd commented Jun 5, 2023 via email

@ariard
Copy link
Member

ariard commented Jun 5, 2023

Note for the clarity, I think effectively both a loosening (e.g nVersion=3 where TX_MAX_STANDARD_VERSION allows nVersion=3 transaction propagation) and a tightening (e.g some nSequence field usage being banned from propagation) can be used to commit a double-spend.

With a loosening, if the victim full-node is not upgraded, they won't accept your new nVersion=3 transactions, and you can feed the rest of the upgraded network with your nVersion=3 double-spend.

With a tightening, if the victim full-node is upgraded, they won't accept your abusive nSequence transaction, and you can feed the rest of the non-upgraded network with your abusive nSequence transaction.

So it sounds to me we're in sync, my observation was about the attacker cost of committing a double-spend, that can be slightly tweaked by the type of policy changes. For e.g, if we allow segwit v3 spends (a policy loosening), where the size of spends is smaller than other spends, the satoshi cost (whatever the sat/vb) of committing a double-spend is lower. This what I meant by saying "not all the mempool policies change are equal in term of practicality of exploitation".

All uses of 0conf LN channels that I'm aware of in the wild are not relying on
unconfirmed transactions being secure. That of course would be nuts. They're
simply relying on the fact that the initiator of the channel has all the
private keys and does not need to worry about the user double-spending them (eg
Phoenix's use of 0conf LN channels for onboarding users). Do you have a counter
example?

This assumption is correct as long as the initiator of the channel has all the private keys. This is not true anymore with dual-funding or splicing, where inputs can be contributed by 2 or more Lightning nodes. And iirc the BOLT spec, you can combine dual-funding with option_zeroconf. This type of deployement can be advantageous from a user safety viewpoint as you don't have to trust the LSP with your pre-paid payment in exchange of an instant inbound channel. Now, of course you have mempool issues, so it sounds more a trade-off in term of security model?

Re: mempool monitoring, mempoolfullrbf=1 is an example of such a scheme, as
it increases the chance of learning about an economic double-spend. This is
precisely why BTCPay enables mempoolfullrbf=1 by default:
https://docs.btcpayserver.org/FAQ/Wallet/#does-btcpay-server-use-mempoolfullrbf-1-
You are in fact arguing that mempoolfullrbf=1 should be the default.

I still think the conceptual points raised in my above post would be better to be addressed before to turn mempoolfullrbf=1 by default. Note, I think turning mempoolfullrbf=1 increases the change to learn about an economic double-spend (e.g a LN node double-spending a dual-funding because the liquidity market conditions have changed), however a protocol relaying all the conflicts would be even better as you might have multiple counterparties in a collaborative transaction, and you might want to know all who have done so for application-specific reputation system.

The constant attempts to shoehorn random stuff into nostr is hilarious. nostr
is a highly centralized system revolving around a handful of nodes; nostr has
no mechanism to decentralize note distribution. You might as well just create a
centralized transaction monitoring service, such as mempool.space

The thing is Nostr is so young an architecture than it can becomes anything as of today, even a Ethereum unicorn if it wants :)

On the contrary, I think Nostr offers very different decentralization trade-off than base-layer transaction-relay network, where end-users can pay to have their notes reliably delivered to subscribing clients. If such delivery mechanism takes the form of e.g LN onion routing you might have even more privacy-preserving transaction broadcast than current mechanism. The payment ensures a native DoS prevention mechanism, an issue we had with more privacy-preserving transaction broadcast on the base-layer like dandelion.

From a second-layer perspective, redundancy and privacy of transaction broadcast matters as much as decentralization of the transaction-relay network itself.

@ajtowns
Copy link
Contributor

ajtowns commented Jun 6, 2023

Note for the clarity, I think effectively both a loosening (e.g nVersion=3 where TX_MAX_STANDARD_VERSION allows nVersion=3 transaction propagation) and a tightening (e.g some nSequence field usage being banned from propagation) can be used to commit a double-spend.

Any mempool acceptance policy difference between two nodes can be used to prevent your node from seeing transactions the other node accepts. If you outright reject tx A, then spending an output from that tx will suffice. If you accept tx A but the other node outright rejects tx A, then the attacker can construct "X spends A,B (high fee rate)", "Y spends B (low fee rate)", "Z spends Y (high fee rate, but not sufficient to rbf X)" and hide Z from you.

If you only have different replacement policies, where you'll accept "A replaces B" but the other node rejects "A replaces B" then it depends on the details -- if you don't have package relay, then having C spend A will cause you to reject C, eg.

The conclusion that should be drawn from that is that we should be trying to maintain consistent policies throughout the network, whatever those policies happen to be.

@petertodd
Copy link
Contributor

petertodd commented Jun 6, 2023 via email

@petertodd
Copy link
Contributor

petertodd commented Jun 6, 2023 via email

@ekzyis
Copy link

ekzyis commented Jul 30, 2023

@BitcoinErrorLog I am wondering how this change which takes away an option from node operators is compatible with the slogan "Digital freedom starts with you" on https://synonym.to/ which seems to be a company you are the CEO of?

Is this change not infringing the digital freedom of node operators by making it harder to enable full-RBF on their nodes?

@DrahtBot
Copy link
Contributor

DrahtBot commented Aug 3, 2023

🐙 This pull request conflicts with the target branch and needs rebase.

@DrahtBot
Copy link
Contributor

DrahtBot commented Aug 8, 2023

There hasn't been much activity lately and the patch still needs rebase. What is the status here?

  • Is it still relevant? ➡️ Please solve the conflicts to make it ready for review and to ensure the CI passes.
  • Is it no longer relevant? ➡️ Please close.
  • Did the author lose interest or time to work on this? ➡️ Please close it and mark it 'Up for grabs' with the label, so that it can be picked up in the future.

@BitcoinErrorLog
Copy link
Author

BitcoinErrorLog commented Aug 8, 2023

I have not lost interest I simply do not have the technical expertise to maintain this (I'm not a dev, a Core dev helped me submit this), nor the patience to respond to newer gaslighting comments that were already addressed in earlier conversation.

My prediction that this feature would later be used to sneak in an "on" by default is already true too...

Not sure how all of you can be so comfortable with this kind of distortion of status quo, particularly when it serves no one but Peter Todd, some misguided wannabe Core Wizards, and whichever miners Peter can persuade to run code they dont really care about anyway.

Either remove all the policy bullshit, or recognize that status quo is only getting worse, and less useful, the more devs get involved with tweaking it.

@petertodd
Copy link
Contributor

Not sure how all of you can be so comfortable with this kind of distortion of status quo, particularly when it serves no one but Peter Todd, some misguided wannabe Core Wizards, and whichever miners Peter can persuade to run code they dont really care about anyway.

FYI excluding Luxor, I haven't had any significant communications with any mining pools. I of course attempted to contact every mining pool I could find contact details for. But other than two I didn't get any responses back, and those responses was just generic "We'll forward your message to our engineering staff" type responses.

Any "persuasion" appears to have happened purely through my blog posts and talks, and the fact that full-rbf is useful and has no significant downsides. For example, people have noticed Binance using full-rbf to fee-bump their consolidation transactions on occasion; Binance Pool seems to have been one of the earlier pools to turn on full-rbf.

@ajtowns
Copy link
Contributor

ajtowns commented Aug 9, 2023

I have not lost interest I simply do not have the technical expertise to maintain this

Closing and marking as up for grabs.

@ajtowns ajtowns closed this Aug 9, 2023
@bitcoin bitcoin locked and limited conversation to collaborators Sep 3, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet