Hmm, a possible example:
- Node X: supports taproot, some annex features, mempool=300MB, minfee=10sat/vb
- Node Y: support taproot only, mempool=1GB, minfee=5sat/vb
- Tx P: normal taproot tx, feerate=6sat/vb
- Tx C: uses new annex feature when spending P, feerate=20sat/vb
X will only accept P because it’s CPFPed by C and will put them in the same chunk, and perhaps relay them together; but Y will reject C because it can’t validate the new annex feature that C is using.
However, if our logic is:
- X accepts new txs P and C
- X sorts txs by depth/ancestor count, then fee rate, so P then C
- X considers relaying P: it’s above Y’s minfee, so relay it
- X considers relaying C: it’s above Y’s minfee, relay it too
Then Y will accept P at step 3 and reject C at step 4 and everything is fine. And if X was relaying to Z which was running the same software/parameters as X, it would look like:
- X accepts new txs P and C
- X sorts txs by depth/ancestor count, then fee rate, so P then C
- X considers relaying P: it’s below Z’s minfee, so skip it
- X considers relaying C: it’s above Z’s minfee, relay it
- Z does orphan resolution, asking for C’s chunk
- X says the chunk is P+C
- Z requests P
- Z accepts new txs P and C
Note that if Z decided to reject C, there wouldn’t be much point reconsidering P – if it has been above minfee, it would have already been relayed in its own right.