<oembed><type>rich</type><version>1.0</version><author_name>npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd</author_name><author_url>https://nostr.ae/npub1vjzmc45k8dgujppapp2ue20h3l9apnsntgv4c0ukncvv549q64gsz4x8dd</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2022-11-02&#xA;📝 Original message:Hi Suhas,&#xA;&#xA;&gt;From my understanding, the main crux of the reasoning exposed in your post&#xA;would be to solidify the transaction-relay paradigm we have been following&#xA;during the last years, e.g introducing the carve-out rule specifically for&#xA;lightning commitment transactions, or more recently version=3 transactions.&#xA;I think this paradigm could be described summarly as &#34;to each use-case&#xA;belongs a set of transaction-relay policy rules&#34;. Some of this set of rules&#xA;could aim to non-replacement guarantees to the consumers of transactions&#xA;signaling under this regime (e.g zeroconf). Another set of rules could&#xA;provide a high-guarantee that a transaction would always get to a miner, no&#xA;matter what the state of node&#39;s mempools on the network (e.g &#34;maximal rbf&#34;&#xA;for contracting protocols).&#xA;&#xA;First, coming out of my mind, we would have to consider isolation between&#xA;each set of policy rules, ensuring the signaling mechanism cannot be abused&#xA;by an attacker to create a new pinning vector. E.g, a hypothetical concern&#xA;could be BIP125 rules interfering with version=3 policy to block the&#xA;replacement of better ancestor feerate packages. Further, for each set of&#xA;policy rules arises the question of internal consistency, again an attacker&#xA;could abuse them to pin transactions&#xA;propagation. I think an earlier version of version=3 was suffering from&#xA;this concern of not scoping potential &#34;junk&#34; ancestors. None of those&#xA;issues are unsolvable, however we should be well-aware of the&#xA;non-negligeable design complexity encumbered by transaction-relay protocol&#xA;developers to achieve the correct goal. There is not only a need to ensure&#xA;careful policy rules security analysis, but further to communicate well&#xA;their usage to second-layers and wallets developers (a task far from easy&#xA;with all the confusions contained by current BIP125).&#xA;&#xA;Now, in the evaluation process of a set of policy rules soundness are&#xA;proposed a few reasoning heuristics: namely that it shouldn&#39;t interfere&#xA;sensibly with a anti-DoS mempool acceptance algorithm, or shouldn&#39;t&#xA;interfere with other protocols on the network, or counter the interests of&#xA;miners or node operators. I hold the belief the latest question could be&#xA;the one raising the most concerns. Browsing in the history of Bitcoin Core,&#xA;I think one of the design goals aimed for has always been to level the&#xA;playing field between miners, e.g BIP152 improving block transfer latency&#xA;to reduce orphan rate. Following this principle, we might wonder if our&#xA;transaction-relay network should guarantee some equal access to transaction&#xA;information to all the miners.&#xA;&#xA;In the present case of a non-replacement policy regime, we could see the&#xA;following situation to arise, on one side miners deploying private&#xA;transaction-relay communication channels or API to capture higher fees&#xA;income from non-standard transactions. On the other-side, transaction&#xA;issuers or consumers bypass the standard transaction-relay policy rules.&#xA;Bypass could be motivated by either a zeroconf service double-spend, or&#xA;faster confirmation of a collaborative transaction. E.g, to reuse the&#xA;example of unconfirmed transaction chaining, where the sender commit to&#xA;non-replacement by opting out from the RBF flag, this commitment could be&#xA;reevaluated in the light of changing network mempools congestion, or&#xA;liquidity preferences (e.g the quick need to open LN routing channels). The&#xA;sender could leverage such hypothetical private transaction-relay&#xA;communication channels to revoke its non-replacement commitment. Therefore&#xA;discrepancies between a set of policy rules design and miners incentives&#xA;sounds to lead to informational asymmetries, harmful for the long-term&#xA;decentralization of the mining ecosystem. Of course, miner incomes&#xA;asymmetries due to edge in transaction flows access might not be weighted&#xA;as serious today, in a world where transaction fees contribute to most of&#xA;the block reward, this is far more worrying!&#xA;&#xA;Of course, one position could be to estimate that miner centralization is&#xA;beyond the scope of responsibility of the Bitcoin Core project. Or at least&#xA;as a result of lightweighted risks.&#xA;&#xA;Such discrepancy between a set of policy rules design and miners incentives&#xA;could also lead to hidden security risks for second-layers. As we see more&#xA;security assumptions made on policy rules extension, e.g version=3, a&#xA;lightning channel counterparty could have a competing interest to forge a&#xA;raw package suiting better incentives, and as such nullify the security&#xA;advantage expected. This could be seen as a loose concern, however the last&#xA;time we have seen an actor deliberately providing non-standard transactions&#xA;to a miner to break second-layers was yesterday [0]!. From observing other&#xA;cryptocurrencies spaces, such &#34;MEV-style&#34; attacks could be more and more&#xA;concerning [1]. I don&#39;t think we should assume miners to behave as &#34;network&#xA;gentlemen&#34;, in a world where mining can be anonymous, permissionless and&#xA;censorship-resistant (e.g Stratum V2 giving back template construction to&#xA;miners operators rather than pools).&#xA;&#xA;According to me, one of the harder problem we&#39;re seeing with this fullrbf&#xA;discussion is the lack of a consistent, grounded and well-understood miner&#xA;incentive model, where not only block template construction but also&#xA;transaction collection and replacement strategies are analyzed, and against&#xA;which we could simulate the efficiency of a policy. Assuming we would have&#xA;such a model, rather than qualify a policy rule as incentive-compatible in&#xA;a binary fashion, we could evaluate them on a scale, and agree on when&#xA;they&#39;re satisfying enough in face of technical complexity, validation&#xA;resources, margin of adversarial exploitation, or whatever other relevant&#xA;criteria.&#xA;&#xA;Answering a few other points raised in this post, what appears to me&#xA;obscure is the qualification that fullrbf doesn&#39;t solve the DoS issues for&#xA;contracting protocols (e..g coinjoin/dual-funded lightning). If I can&#xA;understand, it&#39;s on the ground that the imperfections of BIP125 underscore&#xA;only the direct conflict feerate. It should be remembered that allowing&#xA;replacement without considering the opting flag would be already an&#xA;improvement against the DoS attack, as the attack would have to offer a&#xA;more compelling feerate to maintain the pin. Improvements of BIP125 can&#xA;happen on the top, but solving the opt-out double-spend issue sounds to me&#xA;a prerequisite.&#xA;&#xA;Beyond that, I think few questions are laid out on the conceptual soundness&#xA;of v3 transaction policy w.r.t concerns raised about fullrbf today. In my&#xA;opinion, I&#39;m sadly with most of them, especially that miners might earn&#xA;more revenue if we allowed multiple descendant v3 transactions and the&#xA;unenforceable promise for the recipient of such package to not add more&#xA;high-value children, I&#39;ve echoed those concerns earlier in the review of&#xA;nVersion=3 proposal [2]. We might have to swallow the bullet for now, and&#xA;be okay as lightning developers and operators that there is only a social&#xA;inertia of the miners and lack of reliable communication channels towards&#xA;them by an adversarial counterparty to offer security [3]. Additionally, I&#xA;think it would be acceptable to have an option to disable v3 transaction&#xA;policy, an operator could be willing to reduce the CPU/memory DoS surface&#xA;of its node from partaking to any package relay. Even if it comes at the&#xA;loss of a better view of blockspace demand and downgrades its&#xA;fee-estimation, I think we should give the maximum flexibility to operators&#xA;in choosing their risk model.&#xA;&#xA;To put it in a nutshell, if we would like to pursue further in the paradigm&#xA;that &#34;to each use-case belongs its set of policy rules&#34; (as long as they&#xA;don&#39;t introduce any harm for the network stakeholders), I believe we would&#xA;be more grounded with a better quantitative understanding of so-called&#xA;&#34;miners incentives&#34;. I&#39;m still wondering if it&#39;s realistic to deploy policy&#xA;rules that are not sustainable in face of long-term mining dynamics.&#xA;&#xA;Best,&#xA;Antoine&#xA;&#xA;&#xA;[0] https://github.com/lightningnetwork/lnd/issues/7096&#xA;&#xA;[1] On risks of introducing miner harvesting attacks, especially when you&#xA;consider implications on lightning-style constructions&#xA;https://lists.linuxfoundation.org/pipermail/lightning-dev/2020-February/002569.html&#xA;and&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2021-November/019615.html&#xA;&#xA;[2]&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020939.html&#xA;&#xA;&#34;If you&#39;re a miner and you receive a non-V3, second descendant of an&#xA;unconfirmed V3 transaction, if the offered fee is in the top mempool&#xA;backlog, I think you would have an interest to accept such a transaction.&#xA;&#xA;So I&#39;m not sure if those two rules are compatible with miners incentives...&#34;&#xA;&#xA;[3] This wonders if we should look forward in the future to lock in the&#xA;CPFP weight of a Lightning commitment with some new consensus semantic, or&#xA;leveraging any covenant magic, cf.&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-March/020122.html&#xA;and&#xA;https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-October/020991.html&#xA;&#xA;Le lun. 31 oct. 2022 à 11:02, Suhas Daftuar via bitcoin-dev &lt;&#xA;bitcoin-dev at lists.linuxfoundation.org&gt; a écrit :&#xA;&#xA;&gt; AJ,&#xA;&gt;&#xA;&gt; Thanks for the thoughtful post. I think your observations about how we&#xA;&gt; view mempool policy in the Bitcoin Core project, and how that seems to be&#xA;&gt; changing in the discussions around `-mempoolfullrbf`, are on-point and&#xA;&gt; provide a helpful baseline for considering future policy changes.&#xA;&gt;&#xA;&gt; For a long time I viewed fullrbf as an eventuality and I considered myself&#xA;&gt; to be philosophically supportive of the idea.  However, after giving this&#xA;&gt; issue some thought in the past few weeks, I am reversing my thinking on&#xA;&gt; this.  Concretely, I will argue that we should continue to maintain a relay&#xA;&gt; policy where replacements are rejected for transactions that don&#39;t opt-in&#xA;&gt; to RBF (as described in BIP 125), and moreover, that we should remove the&#xA;&gt; `-mempoolfullrbf` flag from Bitcoin Core’s latest release candidate and not&#xA;&gt; plan to release software with that flag, unless (or until) circumstances&#xA;&gt; change on the network, which I&#39;ll discuss below.&#xA;&gt;&#xA;&gt; This is, of course, a nuanced topic, and among the considerations is a&#xA;&gt; philosophy of how to think about the relay policy and configuration options&#xA;&gt; that we make available in Bitcoin Core (a consideration that is perhaps&#xA;&gt; unique to that project, but I think relevant for this mailing list).&#xA;&gt;&#xA;&gt; I&#39;ll start with some technical issues regarding the benefits of enabling&#xA;&gt; fullrbf on the network.  In the current BIP 125 regime, every time a&#xA;&gt; transaction is created, a choice is made whether to subject the transaction&#xA;&gt; to BIP 125’s RBF rules or not (based on the sequence values of the&#xA;&gt; inputs).  So given that users can already opt-in to RBF, the benefit of a&#xA;&gt; “fullrbf” network policy would be if, somehow, RBF users were still denied&#xA;&gt; the benefits of RBF due to the existence of other transactions that don’t&#xA;&gt; opt-in.&#xA;&gt;&#xA;&gt; Along those lines, Antoine Riard brought up[1] a DoS vector that is&#xA;&gt; available to someone who wants to interfere with multi-party funded&#xA;&gt; transactions, and suggested that fullrbf would eliminate the problem.&#xA;&gt; After exploring that question again in this thread (thanks to Greg Sanders&#xA;&gt; for clarifying this to me), I understand that the issue is around ensuring&#xA;&gt; that a multiparty (coinjoin-type) protocol is able to make eventual&#xA;&gt; progress, by having a candidate multiparty transaction either eventually&#xA;&gt; confirm or become conflicted with something that has been confirmed, in&#xA;&gt; which case the double-spend information could be used to start a new&#xA;&gt; coinjoin round with fewer participants.  The concern Antoine and Greg have&#xA;&gt; brought up is that non-rbf transactions can persist in the mempool&#xA;&gt; ~indefinitely (at a low feerate and not subject to replacement) and&#xA;&gt; interfere with progress being made in a coinjoin protocol.&#xA;&gt;&#xA;&gt; However, it seems to me that similar problems exist for such a protocol&#xA;&gt; even in a fullrbf world, as we understand that term today.  I mentioned the&#xA;&gt; ability for rbf “pinning” to interfere with relay of the multiparty&#xA;&gt; transaction (even if the conflicting transaction signals for RBF – a set of&#xA;&gt; large but low feerate conflicting transactions can persist in the mempool&#xA;&gt; and make it difficult for the coinjoin transaction from confirming, at&#xA;&gt; least without attaching a very large fee); and as Greg mentioned in a&#xA;&gt; followup, the BIP 125 rule to only permit 100 transactions to be removed&#xA;&gt; from the mempool at a time during a replacement can also be used to pin a&#xA;&gt; coinjoin protocol in the same way as a non-rbf transaction today.  It seems&#xA;&gt; to me that what these multiparty protocols actually need is some sort of&#xA;&gt; &#34;maximal rbf&#34; network policy: a way to guarantee that a transaction which&#xA;&gt; should be desirable for a miner to mine would always get to a miner and&#xA;&gt; considered for inclusion in a block, no matter what the state of node’s&#xA;&gt; mempools on the network.&#xA;&gt;&#xA;&gt; While that sounds like a reasonable thing to want on its face (and worth&#xA;&gt; working on), it&#39;s not how opt-in RBF works today, nor is it how transaction&#xA;&gt; relay has ever conceptually worked.  We have not, thus far, been able to&#xA;&gt; come up with a total ordering on transaction desirability.  Moreover, due&#xA;&gt; to all the DoS issues that exist with transaction relay, there are plenty&#xA;&gt; of seemingly legitimate ways to construct transactions that would not relay&#xA;&gt; well on the network.  Relay has only ever been a best-efforts concept,&#xA;&gt; where we carve out a small subset of the entire transaction universe for&#xA;&gt; which we try to optimize propagation.  The idea behind this approach is&#xA;&gt; that if every use case we can come up with has some way to achieve its&#xA;&gt; goals using transactions that should (eventually) be able to relay, then&#xA;&gt; users wouldn’t have much demand for transactions that would deviate from&#xA;&gt; the supported policies, and we therefore shouldn’t need to worry too much&#xA;&gt; about incentive compatibility concerns when it comes to transaction types&#xA;&gt; that wouldn’t relay at all, even if they are high feerate.  (And when those&#xA;&gt; situations arise where the standard transactions do not accommodate some&#xA;&gt; needed use case, developers typically work to define a policy that is&#xA;&gt; compatible with our anti-DoS goals to support such use cases, such as with&#xA;&gt; the recent proposal for version=3 transactions [2].)&#xA;&gt;&#xA;&gt; BIP 125&#39;s RBF rules themselves were an effort to carve out just a subset&#xA;&gt; of situations where a transaction should evict conflicting ones -- it was&#xA;&gt; not a design that anyone thought would ensure that all replacements which&#xA;&gt; &#34;should&#34; be mined would always propagate.  And I don&#39;t believe that we know&#xA;&gt; how to design policy rules that would achieve the goals of this kind of&#xA;&gt; multiparty protocol in a DoS resistant way, today.  Along those lines, I&#xA;&gt; would point out that even the BIP 125 design itself is not entirely&#xA;&gt; incentive compatible, in that it is possible to construct a replacement&#xA;&gt; transaction that would evict transactions which would be preferable to be&#xA;&gt; included in a block! [3]  (This has been known for years, but fixing this&#xA;&gt; has proven difficult, and the only way to fix it that I’m aware of would be&#xA;&gt; to make BIP 125 RBF even more restrictive than it is today. I do think this&#xA;&gt; is something that needs to be worked on.)&#xA;&gt;&#xA;&gt; Given the limitations of RBF as we have it today, it appears to be&#xA;&gt; incorrect that a fullrbf network policy would solve the problems Antoine&#xA;&gt; raised.  And so absent any other examples, it does not seem to me that&#xA;&gt; fullrbf solves any problems for RBF users, who are already free to choose&#xA;&gt; to subject their transactions to BIP 125’s RBF policy.  From this&#xA;&gt; perspective, &#34;enabling fullrbf&#34; is really just taking away user choice to&#xA;&gt; opt a transaction into a non-replacement policy regime.&#xA;&gt;&#xA;&gt; I think we should ask, then, whether it is reasonable on its face that&#xA;&gt; users might want to opt-in to a non-replacement policy?  Or in other words,&#xA;&gt; is it reasonable for a user to mark a transaction as non-replaceable and&#xA;&gt; have that indication be enforced by the network? Note that these are two&#xA;&gt; different questions: you could imagine a world where fullrbf is a dominant&#xA;&gt; policy, but users still use the BIP 125 signaling method to indicate, in an&#xA;&gt; unenforced way, their intention to not replace a transaction.  This might&#xA;&gt; give useful information to the network or the recipient for how to interact&#xA;&gt; with such a transaction.&#xA;&gt;&#xA;&gt; And I think that it&#39;s entirely possible that users would continue to use&#xA;&gt; the BIP 125 signaling to indicate that they do not intend to replace a&#xA;&gt; transaction.  For better or worse, this might be because zeroconf services&#xA;&gt; continue to differentiate their behavior based on such a signal (possibly&#xA;&gt; in conjunction with other factors), or it could be because there are other&#xA;&gt; behaviors that could be utilized more effectively if the transaction&#xA;&gt; originator has made such a signal, such as the recipient chaining an&#xA;&gt; unconfirmed transaction as a way to bump the fee (CPFP) [4].&#xA;&gt;&#xA;&gt; If it were to be the case that users continued to use BIP 125-style&#xA;&gt; signaling to indicate that they do not plan to replace a transaction, would&#xA;&gt; that be harmful to the network?  This is not something we can stop in our&#xA;&gt; policy rules (short of censoring such transactions, an obviously bad&#xA;&gt; idea).  I think network actors can always do things that we might think are&#xA;&gt; harmful for the network, but that doesn’t mean that there are no legitimate&#xA;&gt; use cases for the tools that such actors might be using.  Just because&#xA;&gt; someone might use some policy to adopt a zeroconf model, doesn’t mean that&#xA;&gt; others aren’t using the same policy to achieve benign ends (such as better&#xA;&gt; CPFP behavior).&#xA;&gt;&#xA;&gt; Moreover, while users might attempt to exploit services that offer&#xA;&gt; zeroconf or other differentiated behavior to non-replacement signaling&#xA;&gt; transactions, they also might not -- I think predicting user behavior in&#xA;&gt; this way (and specifically predicting the complexities of what a business&#xA;&gt; might do and whether users might try to subvert it) is beyond the scope of&#xA;&gt; what we can do as protocol developers.  Instead, I think we can try to&#xA;&gt; answer a different question: if a group of users were to want the ability&#xA;&gt; to opt-in to a non-replacement policy regime, is that a technically sound&#xA;&gt; option for us to have on the network and enforce in software?&#xA;&gt; Specifically, does that interfere with having a sensible anti-DoS mempool&#xA;&gt; acceptance algorithm, or interfere with other protocols on the network, or&#xA;&gt; necessarily run counter to the interests of miners or node operators?&#xA;&gt;&#xA;&gt; And I think the answer to that question, in looking at the difference&#xA;&gt; between opt-in RBF and fullrbf, is no: offering the ability to opt-in to a&#xA;&gt; non-replacement regime for transactions doesn&#39;t introduce any fundamental&#xA;&gt; issues with software or network policy or other protocols.  In a world&#xA;&gt; where we only had fullrbf, I could imagine at some point down the road&#xA;&gt; proposing a non-replacement signal myself, because the complexities around&#xA;&gt; transaction chains (and pinning) are more complex for the RBF case than for&#xA;&gt; the non-RBF case (and BIP 125 is not always incentive compatible to begin&#xA;&gt; with!).  Conceptually, this is no different to me than the version=3&#xA;&gt; transaction policy proposal that has been advancing, if we think of it as a&#xA;&gt; special set of restrictions on transactions designed to accommodate a&#xA;&gt; particular use case.&#xA;&gt;&#xA;&gt; Philosophically, I think we should be looking to add non-interfering use&#xA;&gt; cases to what the network supports.&#xA;&gt;&#xA;&gt; To those who argue for making fullrbf a default policy on the network (or&#xA;&gt; even just offering a flag for users to enable fullrbf), I pose this&#xA;&gt; hypothetical: suppose we deploy the v3 transaction policy proposal (which I&#xA;&gt; hope will happen in the near future).  That policy would restrict the ways&#xA;&gt; that outputs of a v3 transaction can be spent while the transaction is&#xA;&gt; unconfirmed, including by limiting the number and size of descendants that&#xA;&gt; such a transaction can have, and limiting the types of unconfirmed&#xA;&gt; ancestors that can be included.  Suppose in a few years someone proposes&#xA;&gt; that we add a &#34;-disable_v3_transaction_enforcement&#34; flag to our software,&#xA;&gt; to let users decide to turn off those policy restrictions and treat v3&#xA;&gt; transactions the same as v2, for all the same reasons that could be argued&#xA;&gt; today with fullrbf: miners might earn more revenue if we allowed multiple&#xA;&gt; descendant v3 transactions; it&#39;s illogical for the recipient of a v3&#xA;&gt; transaction to believe what is a fundamentally unenforceable promise of a&#xA;&gt; sender to not issue more high value children that descend from an&#xA;&gt; unconfirmed transaction; it&#39;s inappropriate for Bitcoin Core to dictate&#xA;&gt; policy on the network and we should honor user choice to turn off that flag&#xA;&gt; if that’s what users want; if users are relying on v3’s policy restrictions&#xA;&gt; for security then that is an unstable model and we should assume it will&#xA;&gt; get broken[5].&#xA;&gt;&#xA;&gt; It’s obvious to me that adding a flag to disable v3 policy would be&#xA;&gt; subversive to making the lightning use case for v3 transactions work.  And&#xA;&gt; so my response to such a hypothetical proposal would be to argue that no,&#xA;&gt; we should not enable users to disable this policy, because as long as that&#xA;&gt; policy is just optional and working for those who want it, it shouldn’t&#xA;&gt; harm anyone that we offer a tighter set of rules for a particular use&#xA;&gt; case.  Adding a way to bypass those rules is just trying to break someone&#xA;&gt; else’s use case, not trying to add a new one.  We should not wield&#xA;&gt; &#34;incentive compatibility&#34; as a bludgeon for breaking things that appear to&#xA;&gt; be working and not causing others harm.&#xA;&gt;&#xA;&gt; I think this is exactly what is happening with fullrbf.&#xA;&gt;&#xA;&gt; In comparing v3 transaction policy with opting out of transaction&#xA;&gt; replacement, there is of course one significant difference that I have&#xA;&gt; ignored thus far: I think the real difference is an opinion about whether&#xA;&gt; non-replacement transactions that are being used today are, overall, bad&#xA;&gt; for Bitcoin, and whether lightning’s use of v3 transactions in the future&#xA;&gt; would be bad for Bitcoin. If you think that zeroconf is unequivocally bad,&#xA;&gt; and that no one will be able to plausibly construct a case that lightning&#xA;&gt; is bad, then that qualitative judgment might sway you to not worrying about&#xA;&gt; the philosophical issues I&#39;ve raised above, because these situations can be&#xA;&gt; distinguished.&#xA;&gt;&#xA;&gt; However I am not personally willing to say that I think, overall,&#xA;&gt; non-rbf-signaling transactions in use on the network today are bad for&#xA;&gt; Bitcoin (or that fullrbf is definitely good – BIP 125’s rbf rules are&#xA;&gt; something we’ve been trying to improve upon for years, with little&#xA;&gt; success).  Nor am I convinced that someone couldn’t put together a cogent&#xA;&gt; argument for lightning being bad for Bitcoin, because of its reliance on&#xA;&gt; relay policies that are difficult to design and impossible to guarantee as&#xA;&gt; part of its security model.  So I choose instead to merely make a judgment&#xA;&gt; that seems more factually verifiable, which is that non-replacement is a&#xA;&gt; policy widely in use on the network today, and we largely don&#39;t have reason&#xA;&gt; to think (as far as I know!) that the network is seeing a lot of&#xA;&gt; transactions that would violate that policy.&#xA;&gt;&#xA;&gt; If it did turn out that users were commonly signaling non-replacement, but&#xA;&gt; then signing and trying to relay doublespends, then I think that would be a&#xA;&gt; very good reason for Bitcoin Core to adopt fullrbf to reflect the reality&#xA;&gt; of what is happening.  In the meantime, I think it makes more sense to say&#xA;&gt; that because we have BIP 125, there seems to be no need for users to signal&#xA;&gt; one way and behave another, and therefore there is no need to offer&#xA;&gt; software that might break a policy that is working well for some users.&#xA;&gt; Other software projects might choose differently, and it is after all a&#xA;&gt; permissionless network, so if this is in fact an unstable equilibrium that&#xA;&gt; will not last, then presumably someday it will be apparent it is not&#xA;&gt; working and we’ll abandon it.  But I think the philosophy of transaction&#xA;&gt; relay policy in Bitcoin Core should be to support disparate use cases in&#xA;&gt; order to try to make everything work better, rather than break things&#xA;&gt; prematurely because we guess others will break them eventually anyway.&#xA;&gt;&#xA;&gt; For those that have read this long email and still favor a fullrbf network&#xA;&gt; policy (or even just the ability for users to be able to turn on fullrbf&#xA;&gt; for themselves), I’d ask for thoughts on the following questions, which&#xA;&gt; have guided my thinking on this:&#xA;&gt;&#xA;&gt; Does fullrbf offer any benefits other than breaking zeroconf business&#xA;&gt; practices?  If so, what are they?&#xA;&gt;&#xA;&gt; Is it reasonable to enforce BIP 125&#39;s rbf rules on all transactions, if&#xA;&gt; those rules themselves are not always incentive compatible?&#xA;&gt;&#xA;&gt; If someone were to propose a command line option that breaks v3&#xA;&gt; transaction relay in the future, is there a logical basis for opposing that&#xA;&gt; which is consistent with moving towards fullrbf now?&#xA;&gt;&#xA;&gt; Cheers,&#xA;&gt; Suhas&#xA;&gt;&#xA;&gt;&#xA;&gt; [1]&#xA;&gt; https://lists.linuxfoundation.org/pipermail/lightning-dev/2021-May/003033.html&#xA;&gt;&#xA;&gt; [2]&#xA;&gt; https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-September/020937.html&#xA;&gt;&#xA;&gt; [3] This is because under the BIP 125 rules, the feerate of the&#xA;&gt; replacement transaction is not compared to the individual feerates of all&#xA;&gt; transactions being evicted – we just compare feerates with the transactions&#xA;&gt; that are directly in conflict (and not their descendants). So it’s possible&#xA;&gt; for a transaction that would evict 2 or more transactions to have a higher&#xA;&gt; feerate than the direct conflicts, and higher total fee than the set being&#xA;&gt; evicted, but have a lower feerate (eg if it is larger) than that of some&#xA;&gt; subset of the set of transactions being evicted.&#xA;&gt;&#xA;&gt; [4]  Chaining unconfirmed transactions when the sender might RBF the&#xA;&gt; parent is far riskier than if the sender indicates they don&#39;t plan to do so&#xA;&gt; (chaining onto an RBF transaction creates pinning issues for the sender,&#xA;&gt; and risks having the child wiped out if the parent is replaced), so I think&#xA;&gt; this is a concrete reason why signaling that a transaction won’t be&#xA;&gt; replaced could be useful.&#xA;&gt;&#xA;&gt; [5] This is a subtle point. I don’t think v3 transactions create an&#xA;&gt; unreasonable security assumption for the use case it is being designed for.&#xA;&gt; However, I don’t think anyone could rule out the possibility that someone&#xA;&gt; could adopt a usage pattern for v3 transactions that subverts the intent of&#xA;&gt; this policy.  For example, if users started using v3 transactions for all&#xA;&gt; their payments, then the limitations on the number of descendants could&#xA;&gt; directly interfere with CPFP by a recipient, and someone could argue that&#xA;&gt; we should break the policy in order to allow for this hypothetical&#xA;&gt; behavior. I think this is a similar form of argument as saying that&#xA;&gt; zeroconf practices + BIP 125 create an incentive to double-spend non-rbf&#xA;&gt; signaling transactions.&#xA;&gt; _______________________________________________&#xA;&gt; bitcoin-dev mailing list&#xA;&gt; bitcoin-dev at lists.linuxfoundation.org&#xA;&gt; https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#xA;&gt;&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20221102/d2ff3925/attachment-0001.html&gt;</html></oembed>