Skip to content

Conversation

@instagibbs
Copy link
Member

@instagibbs instagibbs commented Oct 13, 2025

Similar reasoning to #33504

During a deeper reorg it's possible that a long sequence of dust-having transactions that are connected in a linear fashion. On reorg, this could cause each subsequent "generation" to be rejected. These rejected transactions may contain a large amount of competitive fees via normal means.

PreCheck based PreCheckEphemeralSpends is left in place because we wouldn't have relayed them prior to the reorg.

@DrahtBot
Copy link
Contributor

DrahtBot commented Oct 13, 2025

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

Code Coverage & Benchmarks

For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/33616.

Reviews

See the guideline for information on the review process.
A summary of reviews will appear here.

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #33959 (test: use ForkGenerator to deduplicate reorg test code by yuvicc)

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.

@instagibbs instagibbs changed the title 2025 10 bypass checkephemeral policy: don't CheckEphemeralSpends on reorg Oct 13, 2025
Copy link
Member

@glozow glozow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to make sense. I'd feel more confident if we add some more test cases for topologies and reorg scenarios that this does (not) apply to?

@@ -1608,7 +1608,7 @@ PackageMempoolAcceptResult MemPoolAccept::AcceptMultipleTransactions(const std::
}

// Now that we've bounded the resulting possible ancestry count, check package for dust spends
if (m_pool.m_opts.require_standard) {
if (!args.m_bypass_limits && m_pool.m_opts.require_standard) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's impossible for m_bypass_limits to be true in this function, so undoing this diff doesn't make a difference. Could we omit it or Assume(!args.m_bypass_limits)?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Took feedback in other PR ahead of time #33504 (comment)

I can definitely put an Assume() on it.

@instagibbs
Copy link
Member Author

marking as draft for now until it becomes dependency-less and I've looked over the tests some more

@instagibbs instagibbs force-pushed the 2025-10-bypass_checkephemeral branch from 9ddde71 to a5299c3 Compare December 1, 2025 17:36
@instagibbs instagibbs marked this pull request as ready for review December 1, 2025 17:37
@instagibbs
Copy link
Member Author

Added some more coverage and now has no dependencies.

@fanquake fanquake added this to the 31.0 milestone Dec 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants