Jump to conversation
Unresolved conversations (32)
@glozow glozow Sep 20, 2023
Note to self from Greg For v3, where we can ask the exact miner score, use that instead of individual, otherwise absurd brutal fee when replacing child + switching sponsees. https://github.com/bitcoin/bitcoin/pull/26403/files#diff-d18bbdec91d0f4825b512a31f34666b000c7b7e2e05a3d43570c4b971532616fR415
src/policy/rbf.cpp
@instagibbs instagibbs May 1, 2023
I don't think this is necessary. `get_utxos` already filters for mature coinbases, and you're making 60 of those above.
test/functional/mempool_package_rbf.py
@theStack theStack Mar 1, 2023
```suggestion // For example, the mempool contains a large, low-feerate transaction A (99,000vB, 1sat/vB feerate). // Transaction A has a small, high-feerate child B (1,000vB, 101sat/vB). The user wants to ``` or maybe ```suggestion // For example, the mempool contains a large, low-feerate transaction A (99,000vB, 1sat/vB feerate) // which has a small, high-feerate child B (1,000vB, 101sat/vB). The user wants to ```
Outdated
src/validation.cpp
@theStack theStack Mar 1, 2023
Missing assertions for the replaced-tx checks: ```suggestion assert submitres2["replaced-transactions"] == [tx.rehash() for tx in package_txns1] self.assert_mempool_contents(expected=package_txns2, unexpected=package_txns1) submitres3 = node.submitpackage(package_hex3) assert submitres3["replaced-transactions"] == [tx.rehash() for tx in package_txns2] ```
test/functional/mempool_package_rbf.py
@theStack theStack Mar 1, 2023
Seems like this is not used anywhere: ```suggestion ```
test/functional/mempool_package_rbf.py
@theStack theStack Mar 1, 2023
```suggestion coin = self.coins.pop(0) ```
test/functional/mempool_package_rbf.py
@theStack theStack Mar 1, 2023
```suggestion // Parent + child with v3 in the mempool. Child is allowed as long as it is under V3_CHILD_MAX_WEIGHT. ```
src/test/txvalidation_tests.cpp
@theStack theStack Mar 1, 2023
```suggestion * 2. The tx must be within V3_CHILD_MAX_WEIGHT ```
src/policy/v3_policy.h
@naumenkogs naumenkogs Jan 6, 2023
Do you ever discuss what will happen in the 2-block-reorg case? A chain of txs could end up being not-re-added to the mempool (due to rules 2/3), and then something becomes insecure. I think I should bring a concrete example here.
doc/policy/version3_transactions.md
glozow naumenkogs
@naumenkogs naumenkogs Jan 6, 2023
>too low to fee-bump B through CPFP I don't get this sentence. Nobody wants to fee-bump B, no? Alice would want to replace B, what does it have to do with fee-bumping?
doc/policy/version3_transactions.md
glozow
@pinheadmz pinheadmz Dec 7, 2022
Question about this and sorry if it's already been addressed: Does this require extra logic for reorg handling? I'm thinking of a chain of v3 TXs: tx1 (confirmed in block 100) -> tx2 (confirmed in block 101) -> tx3 (unconfirmed, currently in mempool) if block 101 is disconnected, that potentially puts tx2 back in the mempool meaning tx3 is now invalid and should be evicted.
doc/policy/version3_transactions.md
pinheadmz glozow
@instagibbs instagibbs Nov 29, 2022
After this check, we know it's a mixture(?) and therefore illicit, making hitting https://github.com/bitcoin/bitcoin/pull/25038/commits/000facb0460372cc320158189090e4d36862eb0e#diff-a19c07329799a164e1e3bd89e7cd07f1a8e5e97b88f2b24c9bef17df04479c74R51 impossible and the below loops a only useful for returning an example illicit tuple. Perhaps just grab one v3 example and one non-v3 example and return those to simplify the rest of the code?
src/policy/v3_policy.cpp
glozow
@ariard ariard Nov 29, 2022
Also, I think this could be a minor issue for LN implementation. If some of your counterparties have not upgraded their software to support V3 transactions you might have a subset of your channel transaction still under V2 during the transition period. If you have a common child for batched fee-bumping shared between a V2 commitment transaction and V3 commitment transaction, the whole operation is likely to fail. Of course, batch fee-bumping should be considered harmful for time-sensitive commitment transactions (i.e ones with HTLC outputs) though we might have further silent issues even when it's not time-sensitive. In my opinion, this is a potential issue LN devs should be aware of, processing between V2 and V3 channels should be well isolated.
Outdated
doc/policy/version3_transactions.md
glozow
@ariard ariard Nov 29, 2022
I think this implies that any 0conf acceptance softwares should be upgraded to tread V3 transactions by default as replaecable. I would say it could be valuable to notify the operators of such services.
Outdated
doc/policy/version3_transactions.md
naumenkogs glozow
@ariard ariard Nov 29, 2022
I think it could be precised if those rules are still applied in case of reorg and a V2 ancestor transaction comes back in the mempool, if the V3 child package should be evicted or conserved. In the case it's evicted, you have to consider LN V3 package being evicted and as a LN node you should resuscitate the V2, fee-bump it again, wait for confirmation and then re-broadcast your V3 package.
Outdated
doc/policy/version3_transactions.md
ajtowns instagibbs
glozow
@ariard ariard Nov 29, 2022
If we would like to add more rational to the design of the rules, we could explain why a scorched earth approach would solve the Lightning case really imperfectly (discussed recently here: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-November/021176.html). Indeed, Lightning implementation could just blindly replace-by-fee the pinning transactions, paying up to the channel value. This wouldn't work at all against an attacker pinning with one single malicious transaction multiple channel from different parties where the malicious transaction fee is above the value of each channel. E.g channel A 10000 sats, channel B 25000 sats and channel C 8000 sats. If the malicious pinning transactions fee equals 26000 sats, none of the honest party will rationally fee-bump more than their own channel value. Feerate-only replacement rules scales up to the maximum package size and worst historical mempool reduce consideraly the fee-bumping reserves requirement for a LN node, which is a notable advantage I think.
doc/policy/version3_transactions.md
@ariard ariard Nov 29, 2022
This should precise if the mempool conflicts are required to be V3 themselves. From my memory of the mailing list discussions and elsewhere, I think the current state of thinking, directly conflicting transactions versions number are not considered. For the Lightning use-case, this is a significant security advantage as the ~80k of public channels, with all pre-signed revoked commitment transactions V2 can be replaced with newer version=3 package. Revoked commitment transactions, even if the honest counterparty is in knowledge of the revocation secret, are still consensus and policy valid transactions, and as such can be leveraged as pinning means. On the other hand, I think allowing V3 to replace V2 chain of transactions lead to the consequence than V2 users are implicitly subscribing to this new replacement regime. A receiver of a V2 transaction could apply the BIP125 rules to estimate the replacement odd of the transaction, and the application logic be broken when the actual rule 3 of minimum between package feerate and ancestor feerate is applied. I don't know if we're significantly interfering with any Bitcoin application here.
Outdated
doc/policy/packages.md
glozow
@instagibbs instagibbs Nov 4, 2022
some related discussion on estimating mining score of the replacement: https://github.com/bitcoin/bitcoin/pull/26451#issuecomment-1303889425
src/policy/rbf.cpp
instagibbs glozow
@instagibbs instagibbs Nov 3, 2022
no results are being pushed here, which seems to mean we'll hit `NONFATAL_UNREACHABLE` in the switch statement in `submitpackage` RPC with a tx that doesn't hit the above two conditions. e.g., a non-standard script
Outdated
src/validation.cpp
@instagibbs instagibbs Nov 2, 2022
(just noting to remember) This lets through un-paid-for RBFs for single tx packages, as well as bypasses conflict set creation, leading to internally-inconsistent mempool
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Oct 26, 2022
the idea being, carveouts are only useful in the individual tx scenario, not package context? i.e., you wouldn't need to propagate *both* anchor spends on a commit tx in a package, which busts original limits?
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Oct 26, 2022
note: a test that this commit fixes the purported future bug would be a good idea
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Oct 25, 2022
thought: do we just want to make the version check a thing in `SignalsOptInRBF`?
src/validation.cpp
glozow
@instagibbs instagibbs Oct 25, 2022
why bother with the loop vs one huge tx?
Outdated
src/test/txvalidation_tests.cpp
glozow
@t-bast t-bast Sep 29, 2022
I was wondering whether this could be a pinning vector when used with v3 transactions, but it's not :tada: Packages are by default restricted to 25 elements, so in theory we're safe, but since this value is configurable, we cannot completely rely on this protection. However, the size restriction on the v3 child ensures that it cannot be bumping 100 parent transactions, so this ensures that we're really safe (unless I'm missing something)!
Outdated
doc/policy/packages.md
instagibbs glozow
@t-bast t-bast Jul 28, 2022
Maybe this is a naive question, but is there a way we can make that value configurable instead of using a protocol hard-coded value? Informally, any v3 transaction would include a _descendant_max_weight_ somewhere (handwave, handwave), covered by signatures. This lets L2 contracts decide what values are acceptable for each tx type. For example, in the anchor outputs LN-penalty case, we know that commit txs only need an anchor child that can be constrained to be quite small, so commit txs could use a low value here, that can take into account the maximum weight of a commit tx. Or would this be adding too much complexity for only a marginal improvement? If so, we should probably bikeshed the protocol hard-coded value and use the lowest value we can to minimize the harm a malicious child tx can do.
Outdated
doc/policy/version3_transactions.md
instagibbs
@instagibbs instagibbs Jul 19, 2022
I believe this falls short in that the parent V3 transaction can be just south of 101kvB, even in ANYONECANPAY and SIGHASH_SINGLE like scenarios where additional inputs cannot be excluded by the presigning parties. In imprecise language, this is what I expect to be required to solve it: "When evaluating a V3 transaction, if its total mempool package size after entry into the mempool would exceed 4000 virtual bytes, it is rejected."
Outdated
doc/policy/version3_transactions.md
t-bast instagibbs
glozow
@sdaftuar sdaftuar Jun 3, 2022
Since we are introducing a new form of RBF that doesn't currently exist, now might be the best time to at least improve the BIP 125 rules to be incentive compatible in all situations (though this comes at the cost of making replacements potentially more expensive). In particular what I have in mind is that we require the ancestor feerate of the child transaction to be higher than the actual feerate of all transactions that would be evicted. This is conservative but I think would ensure that we don't have any situations where there are transactions being replaced that might appear in the next block, while the new transactions do not. Would this be too conservative for the use cases that we have in mind?
Outdated
doc/policy/packages.md
t-bast instagibbs
ajtowns
@t-bast t-bast May 10, 2022
My head hurts :laughing: I'm not 100% sure I'm understanding this rule correctly, can you let me know if the following example makes sense? Let's imagine we have `{commitTxAlice, anchorTxAlice}` in the mempool that we want to replace. What we really want to do is to replace `commitTxAlice` by `commitTxBob` (the child is just a tool to achieve that). We ask `bitcoind` to `fundrawtransaction` to ensure our `anchorTxBob` adds enough funds. `bitcoind` adds an unconfirmed (but safe) wallet input: ``` +-------------+ | commitTxBob |---------+ +-------------+ | +-------------+ | | | +------------------+ +----->| anchorTxBob | | previousWalletTx |---------->| | +------------------+ +-------------+ ``` If we include `previousWalletTx` in the package, this package-rbf would work, right? But if we don't include `previousWalletTx` in the package, this would be rejected? But what if `previousWalletTx` itself has an unconfirmed parent? We cannot include this grand-parent in the package (since packages are only parents-with-single-child). This isn't directly bringing an unconfirmed input, but it is indirectly bringing one. Is that ok? If that's ok, why wouldn't it be ok to just allow adding new unconfirmed inputs in the first place?
Outdated
doc/policy/packages.md
t-bast glozow
@ariard ariard May 9, 2022
Depending on the design of p2p packages, we might relay the "full-non-dedup" version of the package as our peers might not have the same mempool composition. So the additional fees might have to be paid on the non-dedup package. I don't think we have to settle the question now though we might have to rework package-RBF in function of p2p design ?
Outdated
doc/policy/packages.md
@ariard ariard May 9, 2022
IIUC given that `PackageMempoolChecks` happens after package dedup there should not be remaining already-in-mempool transactions at that stage in `txns` ? So no descendants that could be `to-be-replaced mempool entries` to subtract or are you thinking to something else ?
Outdated
src/validation.cpp
glozow
@ariard ariard May 9, 2022
Reason to not turn `PackageTestAccept` as `true` too ?
Outdated
src/validation.cpp
glozow
Resolved conversations (54)
@instagibbs instagibbs Aug 8, 2023
I don't think this case is actually covered rebased ephemeral anchor branch is failing on this test: https://github.com/bitcoin/bitcoin/pull/26403/files#diff-d18bbdec91d0f4825b512a31f34666b000c7b7e2e05a3d43570c4b971532616fR409
Outdated
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Nov 29, 2022
what is this switch doing?
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Nov 29, 2022
`m_package_feerates` currently is only true when `m_allow_carveouts` is false, no? The `Assume` should be dead code. this whole block is extremely verbose and I'm not sure what it's supposed to be doing
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Nov 29, 2022
At this point they cannot both be non-v3, due to https://github.com/bitcoin/bitcoin/pull/25038/commits/000facb0460372cc320158189090e4d36862eb0e#diff-a19c07329799a164e1e3bd89e7cd07f1a8e5e97b88f2b24c9bef17df04479c74R74
Outdated
src/policy/v3_policy.cpp
glozow
@instagibbs instagibbs Nov 29, 2022
this comment I think only applies to `V3_ANCESTOR_SIZE_LIMIT_KVB`?
Outdated
src/policy/v3_policy.h
glozow
@instagibbs instagibbs Nov 29, 2022
```suggestion conditions apply, see [RBF rules](./mempool-replacements.md) and [Package RBF ```
Outdated
doc/policy/version3_transactions.md
glozow
@instagibbs instagibbs Nov 29, 2022
```suggestion * [CPFP Carve Out](./mempool-limits.md#CPFP-Carve-Out) is disabled in the package context. (#21800) ```
doc/policy/packages.md
glozow
@instagibbs instagibbs Nov 29, 2022
```suggestion ancestors and descendants being considered at the same time. Single-transaction submission behavior is unchanged. ```
doc/policy/packages.md
glozow
@ariard ariard Nov 29, 2022
In the light of the discrepancy between BIP125 and our mempool code, I think this should precise if we mean explicit signaling only or explicit signaling+inherited signaling.
Outdated
doc/policy/packages.md
glozow
@instagibbs instagibbs Nov 3, 2022
```suggestion results.emplace(wtxid, single_res); package_state.Invalid(PackageValidationResult::PCKG_TX, "transaction failed"); ```
Outdated
src/validation.cpp
instagibbs glozow
@instagibbs instagibbs Nov 3, 2022
errr, the same code path hits here :)
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Oct 28, 2022
Add an explicit comment here what this check is
Outdated
src/policy/contract_policy.cpp
glozow
@instagibbs instagibbs Oct 28, 2022
Comment should probably note that the check happens just below. As is it sounds like it's happening via caller
Outdated
src/policy/contract_policy.cpp
glozow
@instagibbs instagibbs Oct 27, 2022
I think this is broken, it's only considering the deduplicated package, which "blinds" this evaluation from checking if the in-mempool parent is V3. Hence, the child as V2 would be accepted, even if parent in mempool was V3.
src/validation.cpp
instagibbs glozow
@instagibbs instagibbs Oct 26, 2022
prevent identical txids between different packages, I presume
Outdated
test/functional/mempool_package_rbf.py
glozow
@instagibbs instagibbs Oct 26, 2022
to rephrase: make sure original conflicting txs are not being used by the replacement package itself?
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Oct 26, 2022
Don't understand this comment
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Oct 26, 2022
can you state in the comment what the practical effect(s) of not accounting for this difference is?
Outdated
src/validation.cpp
glozow
@instagibbs instagibbs Oct 26, 2022
can we "watermark" the entry names with if they're low or high, or just grab a renamed copy?
Outdated
src/test/rbf_tests.cpp
glozow
@instagibbs instagibbs Oct 26, 2022
to belabor the commit text: "Transactions could conflict with the same tx" meaning transactions in the same package can conflict with the same original tx, so for package evaluation, we only want to count these once?
src/validation.cpp
glozow
@instagibbs instagibbs Oct 25, 2022
let's also have an example that *just* makes it in
Outdated
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Oct 25, 2022
can we get a better error description?
Outdated
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Oct 25, 2022
assert that `fullrbf` is false in `getmempoolinfo`... just in case
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Oct 25, 2022
repeat of https://github.com/bitcoin/bitcoin/pull/25038/commits/c11fb499f182306f635ea9457ec4574b2992e185#diff-15a1888c9151fc1d182c23e34b71d691f70df448bceb9eb78c8296f18854b6a3R67 ?
Outdated
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Oct 25, 2022
mine a block for simpler reading of test
Outdated
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Oct 25, 2022
change *all* these checks to `getrawmempool` for strict assertion there is a single tx, and the hash is as expected
Outdated
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Oct 25, 2022
clear out mempool via miner, to make it clear what's in flight in test
test/functional/mempool_accept_v3.py
glozow
@instagibbs instagibbs Oct 25, 2022
just do a single generate of 110 if you need 10 coins
Outdated
test/functional/mempool_accept_v3.py
@instagibbs instagibbs Oct 25, 2022
let's assert up here what size this is, since I'm unsure how big 10 200-input txs are, off-hand
Outdated
src/test/txvalidation_tests.cpp
glozow
@instagibbs instagibbs Oct 25, 2022
we also need positive test cases of `CheckV3Inheritance`
Outdated
src/test/txvalidation_tests.cpp
glozow
@instagibbs instagibbs Oct 25, 2022
s/tx_v3_from_v2_and_v3/tx_v2_from_v2_and_v3/ ?
Outdated
src/test/txvalidation_tests.cpp
glozow
@instagibbs instagibbs Oct 25, 2022
s/must also have/must also be/
Outdated
src/policy/contract_policy.h
glozow instagibbs
@instagibbs instagibbs Oct 25, 2022
make explicit what is returned
Outdated
src/policy/contract_policy.h
glozow
@instagibbs instagibbs Oct 25, 2022
suggestion: rename arg to `checked_package`
Outdated
src/policy/contract_policy.h
glozow
@instagibbs instagibbs Oct 25, 2022
s/must also have/must also be/
Outdated
src/policy/contract_policy.h
glozow
@instagibbs instagibbs Oct 25, 2022
or wallets that want robust RBF abilities...
Outdated
src/policy/contract_policy.h
glozow
@instagibbs instagibbs Oct 25, 2022
"The duduplicated package" just to make it abundantly clear.
Outdated
doc/policy/packages.md
glozow
@instagibbs instagibbs Oct 25, 2022
The pinning "damage" is specifically bounded between the tx size of whatever an honest user would have needed to make to bump, and the total allowed limit. For example, if a wallet only needs half the space for an honest fee bump, an attacker is bound to a 2x fee pin attack, maximum, instead of 200x without V3 rules. Might want to mention that it bounds the economic damage by ~100x in a digestible form.
doc/policy/version3_transactions.md
glozow
@instagibbs instagibbs Oct 25, 2022
"Just like any other policy measure, it does not effect validity of data in blocks."
Outdated
doc/policy/version3_transactions.md
glozow
@instagibbs instagibbs Oct 25, 2022
based on discussion at Coredev: Any ancestor as well!
doc/policy/version3_transactions.md
glozow
@instagibbs instagibbs Oct 25, 2022
... for non-V3 transactions
Outdated
doc/policy/version3_transactions.md
glozow
@instagibbs instagibbs Oct 25, 2022
"evicted in the event of a replacement" is a tautology, it's being replaced so obviously it's being evicted. suggested: "in the event of mempool entry of the new transaction"
Outdated
doc/policy/packages.md
glozow
@t-bast t-bast Sep 29, 2022
Shouldn't we call `CheckV3Inheritance` here instead of letting the caller check that before? There are no cases where we want to call `ApplyV3Rules` without also checking v3 inheritance, are there?
Outdated
src/policy/contract_policy.cpp
glozow
@t-bast t-bast Sep 29, 2022
It looks like part of this comment should be on the CheckV3Inheritance overload below, the one that takes a `ptx` as argument?
Outdated
src/policy/contract_policy.h
glozow
@t-bast t-bast Sep 29, 2022
nit: ```suggestion /** Maximum virtual size of a tx which spends from an unconfirmed V3 transaction, in vB. */ ```
Outdated
src/policy/contract_policy.h
glozow
@t-bast t-bast Sep 29, 2022
Can we relax the `replacement_ancestor_feerate` for v3 transactions? What would be ideal would be to simply ignore unconfirmed v3 ancestors from this calculation (some kind of `replacement_non_v3_ancestor_feerate`), which I believe is ok from an incentives' point of view given the other restrictions on v3 packages. Otherwise we will have the following issue: - a commitment transaction pays 0 fees and weighs 19,000 vbytes (it has many HTLCs) - an attacker publishes a CPFP v3 child that weighs 1,000 vbytes and has an individual feerate of e.g. 100 sat/byte - the package feerate ends up being 5 sat/byte, and the package doesn't confirm - if a feerate of 20 sat/byte for the package was enough to get the package confirmed, the honest participant would target that and thus create a CPFP v3 child with a feerate of 400 sat/byte - but that would be rejected under the current rules, and the honest participant is forced to make the _package feerate_ be 100 sat/byte, which is extremely expensive I'm realizing now that this is actually just another way of formulating @instagibbs's proposal to evict v3 siblings: when the direct conflict is a v3 transaction with an unconfirmed v3 parent, it would be great to only compare their individual feerates.
src/policy/rbf.cpp
instagibbs t-bast
glozow
@t-bast t-bast Sep 29, 2022
Maybe an unrelated question, but currently bitcoind doesn't let us create a transaction that has no outputs. In the context of CPFP, transactions with no outputs can be very useful: if you have inputs that let you reach the desired package feerate without creating any change, that's what you want to do. But currently we can't, so we have to overshoot the input amount and add a change output. Is there a consensus rule that disallows transactions with no outputs in blocks? If not, it would be quite useful to allow v3 transactions that have no outputs, introducing that new version is a good opportunity to do that.
Outdated
doc/policy/version3_transactions.md
instagibbs glozow
t-bast
@t-bast t-bast Sep 29, 2022
nit: ```suggestion A transaction with its `nVersion` field set to 3 ("V3 transactions") is allowed in mempool and ``` Or start the sentence with "Transactions with their".
Outdated
doc/policy/version3_transactions.md
glozow
@t-bast t-bast Sep 29, 2022
nit: ```suggestion transactions. A directly conflicting transaction and its descendants (together, "original ```
Outdated
doc/policy/packages.md
@instagibbs instagibbs Jul 19, 2022
replaced
Outdated
doc/policy/packages.md
instagibbs glozow
@instagibbs instagibbs Jul 19, 2022
All of the directly conflicting transactions already in mempool?
Outdated
doc/policy/packages.md
glozow
@t-bast t-bast May 10, 2022
This rule startled me a bit at first, it may be worth mentioning that if you want to update the package's child, you should do a normal RBF of just that child. What you mean is that package-rbf applies for the case where we want for example to replace `{commitTxAlice, anchorAlice}` by `{commitTxBob, anchorBob}` where `commitTxAlice` and `commitTxBob` conflict, but we cannot use package-rbf to replace `{commitTxAlice, anchorAlice1}` by `{commitTxAlice, anchorAlice2}` where `anchorAlice2` pays more fees than `anchorAlice1`. In that case we should submit `anchorAlice2` alone and it will go through the usual RBF rules. Is that correct? Also you don't want to mix up package-rbf and normal rbf, so a child tx cannot create conflicts "outside of the package" IIUC.
Outdated
doc/policy/packages.md
glozow
@ariard ariard May 9, 2022
I think it could be a limitation for second-layer package issuers, where a child-with-parents package aims to replace more than 5 LN commitment transactions at the same time. A counterparty could extend the 5 non-related commitment transactions descendants until reaching max in-mempool limits, thus interfering with their potential package-RBF. Am I correct ? That said, I remember we've already said that child-with-parents to replace multiple LN commitment transactions open the door to malicious interferences.
Outdated
doc/policy/packages.md
glozow t-bast
@ariard ariard May 9, 2022
Not sure if this check isn't already redundant given that calling `ReplacementChecks` in `AcceptSingleTransaction` is dependent on `m_rbf=true` or unless there is another code path where it makes sense ?
Outdated
src/validation.cpp
glozow