Post-clustermempool package RBF: per-chunk processing

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:

  1. X accepts new txs P and C
  2. X sorts txs by depth/ancestor count, then fee rate, so P then C
  3. X considers relaying P: it’s above Y’s minfee, so relay it
  4. 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:

  1. X accepts new txs P and C
  2. X sorts txs by depth/ancestor count, then fee rate, so P then C
  3. X considers relaying P: it’s below Z’s minfee, so skip it
  4. X considers relaying C: it’s above Z’s minfee, relay it
  5. Z does orphan resolution, asking for C’s chunk
  6. X says the chunk is P+C
  7. Z requests P
  8. 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.

1 Like