Mining

PRPriorityReviewabilityReviewsAgreementSize
(+)#35675 ismaelsadeeq mining: add block template manager
  • Centralize mining coordination and template lifecycle handling in a dedicated manager
  • Avoid unnecessary block data copying during getblocktemplate RPC calls
  • Unblock downstream improvements to template memory and fee tracking
P2 · unblocks #35581
  • P2 because it cleans up the architectural boundary between mining coordination and node internals
  • Directly unblocks template memory tracking and fee inflow tracking in downstream work
Ready
  • Ready to review now with clean CI and an active author
4 (+1)Mild
  • Strong consensus across multiple reviewers after verifying rebase and lifecycle fixes
  • Supported after copy-avoidance suggestions were incorporated (Sjors)
  • Verified SubmitBlock rebase fix and test lifecycle ordering (w0xlt, pablomartin4btc)
  • Nonblocking suggestion that the new fuzz harness could be deepened in a follow-up (marcofleon)
478 + 413 tests
  • 478 lines added or modified outside tests
  • 413 lines added or modified in tests
  • 449 lines removed in total
  • 28 files, 15 commits
(+)#35671 Sjors mining: add TxCollection to bandwidth-efficiently validate external block templates
  • Allow Stratum v2 services to validate miner-submitted block templates directly against the mempool
  • Saves bandwidth and compute by avoiding duplicate mempool mirrors in mining infrastructure
P2 · new feature
  • P2 because it provides a key integration requirement for Stratum v2 template providers
  • It unblocks downstream Job Declarator Servers from needing full mempool mirrors
  • Reduces redundant transaction synchronization overhead across mining setups
Ready
  • Ready for review after multiple stabilizing review rounds
0Strong
  • Strong concept support for avoiding mirror mempools in Stratum v2 (ismaelsadeeq, pablomartin4btc)
  • Confirmed architectural benefit and resolved code review feedback (enirox001)
  • Tested functionality with minor open question on error return codes (jeanpablojp)
412 + 320 tests
  • 412 lines added or modified outside tests
  • 320 lines added or modified in tests
  • 57 lines removed in total
  • 9 files, 6 commits
(+)#35581 ismaelsadeeq node: add block template manager and track waitNext fee inflow
  • Avoid assembling full block templates on every tick just to check for mempool fee changes
  • Reduce lock contention and CPU load during block generation for mining pools and template consumers
  • Consolidate block creation and template state management into a unified interface
P2 · speedup
  • P2 because replacing full block assembly on every poll removes main lock contention and CPU load for pools
  • Meaningfully improves performance and operation for Stratum v2 and mining template consumers
Review #35675 first
0
Strong
  • Strong support for incremental fee inflow tracking and architectural cleanup
  • Suggested splitting out the base manager into a dedicated preparatory PR (Sjors)
  • Concept approval praising incremental snapshot tracking and bug discovery via fuzzing (pablomartin4btc)
  • Concept approval without stated reasons (w0xlt)
1,171 + 1,493 tests
  • 1,171 lines added or modified outside tests
  • 1,493 lines added or modified in tests
  • 587 lines removed in total
  • 51 files, 27 commits
(+)#36192 Sjors test: cover unsatisfiable mining timestamp
  • Ensure block template creation handles impossible timestamp edge cases gracefully
  • Verify mining interfaces cleanly recover and maintain connections once time advances
P3 · test coverage
  • P3 because it adds test coverage for a reachable but practically infeasible mining edge case
  • Confirms template generation fails cleanly with an error and recovers as soon as time advances
Ready
  • Ready to review with all feedback addressed and passing continuous integration
1
Strong
  • Full code review approval after earlier feedback was resolved (fjahr)
  • Verified the new functional test passes on Ubuntu WSL (adezo24h1)
0 + 124 tests
  • 0 lines added or modified outside tests
  • 124 lines added or modified in tests
  • 29 lines removed in total
  • 6 files, 5 commits
(+)#36097 xyzconstant mining: replace interrupt methods with cancellation arguments
  • Allow multi-process mining clients to cancel blocking calls cleanly within requests
  • Eliminate ad-hoc interrupt calls and protocol race conditions in external mining interfaces
P3 · cleanup
  • P3 because existing interrupt behavior already functions
  • Improves interface ergonomics and stability for external template providers
  • Does not affect critical consensus or mining correctness logic
CI failing
  • CI is failing
  • Temporarily vendors an unmerged upstream commit from libmultiprocess
0
  • No review verdicts recorded
Strong
  • Strong support for native cancellation simplifying client and server interactions (ryanofsky)
  • No objections raised
2,132 + 43 tests
  • 2,132 lines added or modified outside tests
  • 43 lines added or modified in tests
  • 615 lines removed in total
  • 70 files, 2 commits
(+)#35598 Sjors test: cover feeThreshold = MAX_MONEY in interface_ipc_mining.py
  • Test that mining IPC template generation correctly ignores mempool fee increases when configured to do so
  • Prevent silent regressions in template notifications for mining clients that only wait for new block tips
P3 · test coverage
  • P3 because it adds functional test coverage for an existing mining interface configuration
  • Validates template update behavior without introducing new node functionality
  • Helps unblock follow-up mining IPC work
Ready
  • Ready for review
  • All reviewer feedback has been incorporated and CI is passing
0 (+1)
Strong
  • Strong support for adding this test coverage as a standalone change (enirox001)
  • Approach approval with suggested assertions incorporated (jeanpablojp)
  • Timing and fee-polling improvements incorporated (davidgumberg)
0 + 27 tests
  • 0 lines added or modified outside tests
  • 27 lines added or modified in tests
  • 11 lines removed in total
  • 2 files, 1 commits
(+)#33922 Sjors mining: add getMemoryLoad() and track template non-mempool memory footprint
  • Track memory held by transactions retained only because open block templates reference them
  • Expose template memory load over IPC so external mining clients like Stratum v2 providers can manage it
P3 · new feature
  • P3 because tracking non-mempool template memory provides a useful operational tool for external miners
  • Unevicted memory footprint is typically modest under standard conditions rather than a critical risk
Review #35675 first
0 (+2)
Strong
  • Consensus in favor of exposing template memory load over IPC
  • Support for the design and utility of template memory tracking (ryanofsky, vasild, enirox001)
  • Nonblocking objection: prefer node-side FIFO limits over delegating memory management to clients (ismaelsadeeq)
  • Resolved objection: data race addressed by adding a mutex (ryanofsky)
  • Resolved objection: brittle header workaround removed into another PR (maflcko)
630 + 457 tests
  • 630 lines added or modified outside tests
  • 457 lines added or modified in tests
  • 463 lines removed in total
  • 34 files, 19 commits
(+)#35300 w0xlt mining: add precious option to IPC block submission
  • Let external mining software atomically submit and prefer a locally mined same-work block over IPC
  • Avoid race conditions from issuing a separate preciousblock RPC call
P3 · new feature
  • P3 because miners can atomically prefer a same-work block without coordinating across separate calls
  • Worthwhile convenience for IPC mining setups but does not affect template generation performance
Needs rebase
  • Needs rebase against current master due to merge conflicts
  • Author has been silent since July 2026
0
Mild
  • Concept approval for handling precious blocks directly over IPC (Sjors, pablomartin4btc)
  • Questions whether duplicate status should still be returned if precious is requested (Sjors)
  • Recommends splitting and reorganizing the oversized unit test (Sjors)
  • Considers the internal chain activation refactoring a clean prerequisite (pablomartin4btc)
125 + 431 tests
  • 125 lines added or modified outside tests
  • 431 lines added or modified in tests
  • 100 lines removed in total
  • 20 files, 6 commits
(+)#36047 chriszeng1010 rpc: handle createNewBlock() returning nullptr during shutdown
  • Prevent mining RPCs from throwing misleading internal bug assertions when called during node shutdown
  • Return a clean shutdown error or abort gracefully when block template creation fails on exit
P3 · bug fix
  • P3 because it fixes a minor error-handling race in mining RPCs during node shutdown
  • Avoids spurious internal failure reports while longpolling or requesting templates as the node stops
Ready
  • Ready for review
  • Small patch with a reproduction functional test and passing CI
0
  • No review verdicts recorded
Crickets
  • No reviews or concept comments yet
6 + 34 tests
  • 6 lines added or modified outside tests
  • 34 lines added or modified in tests
  • 4 lines removed in total
  • 2 files, 1 commits
(+)#30437 ryanofsky ipc: add bitcoin-mine test program
  • Adds test coverage for client-side multiprocess IPC communication that Python tests cannot exercise
  • Gives external mining tool developers a reference implementation for calling node interfaces over IPC
P3 · test coverage
  • P3 because it validates block template creation and solution submission across process boundaries
  • Unblocks end-to-end testing of mining interfaces over IPC for external mining software authors
Ready
  • Ready to review; clean rebase, CI is passing, and author addressed all concrete feedback
0 (+3)Mild
  • Support for adding test coverage for client-side multiprocess IPC (Sjors)
  • Verified by testing connection, tip retrieval, and mining on macOS (BrandonOdiwuor)
  • Questioned need for an in-tree client and suggested a dedicated CMake option (sedited)
  • Noted that the binary should not be distributed in release packages (fanquake)
219 + 41 tests
  • 219 lines added or modified outside tests
  • 41 lines added or modified in tests
  • 7 lines removed in total
  • 10 files, 5 commits
(+)#32468 polespinasa rpc: generateblock to allow multiple outputs
  • Allow generateblock to create coinbase transactions with multiple outputs and custom amounts on regtest
  • Let generateblock automatically mine mempool transactions when no transaction list is provided
  • Eliminates manual raw block construction boilerplate for developers testing multi-recipient coinbases
P3 · new feature
  • P3 because it improves developer block generation tools on test chains without altering mainnet mining
  • Enables testing pool setups like Ocean or Braidpool without manual raw block construction
Ready
  • Ready to review now that requested design changes are implemented and rebased on master
0
  • No review verdicts recorded
Strong
  • Strong consensus to extend generateblock rather than introducing a new RPC method
  • Suggested extending generateblock and adding optional mempool mining (andrewtoth)
  • Guided keeping test-only coinbase mutation logic out of core node miner code (maflcko)
  • Advocated supporting custom reward splits rather than only equal shares (stickies-v)
131 + 134 tests
  • 131 lines added or modified outside tests
  • 134 lines added or modified in tests
  • 56 lines removed in total
  • 15 files, 7 commits
(+)#36132 l0rinc mining: preserve lookup result count without a mempool
  • Preserve positional indexing in transaction lookups via the mining interface when no mempool is present
  • Prevent broken indexing expectations by returning null entries matching request size instead of empty lists
P4 · cleanup
  • P4 because the missing mempool scenario cannot happen in production mining workflows
  • MakeMining waits for mempool initialization, making this primarily an internal interface cleanup
Ready
  • Ready for review: small and cleanly tested with design questions resolved in discussion
1
Strong
  • Strong consensus on preserving interface contract consistency across reviewers
  • Tested and supported because unifying unpopulated and missing mempool states aids callers (Sjors)
  • Concept approval for interface consistency (jeanpablojp, enirox001)
  • Alternative contract redefinition suggestion answered in discussion (optout21)
2 + 16 tests
  • 2 lines added or modified outside tests
  • 16 lines added or modified in tests
  • 2 lines removed in total
  • 2 files, 2 commits
(+)#36156 l0rinc mining: include chunks that exactly fill block limits
  • Allow block templates to include transactions that bring weight or sigops exactly to limits
  • Avoids leaving unused capacity at the tail of a block template
P4 · bug fix
  • P4 because the fee gain is marginal at under 1000 sats for a single tail transaction
  • Block validity far outweighs minor fee optimizations for miners
Ready
  • Ready to review
  • Code and tests are complete with passing CI
0
Mild
  • Concept approval to align assembler checks with consensus limits (ismaelsadeeq)
  • Nonblocking objection: risk of an invalid block outweighs negligible fee gains under 1000 sats (ajtowns)
2 + 14 tests
  • 2 lines added or modified outside tests
  • 14 lines added or modified in tests
  • 8 lines removed in total
  • 2 files, 2 commits
Reviewability: ReadyStalePaused
Agreement: StrongPositivePositive w/ caveatsNeutralMildDisputedBlockedCrickets
Reviews: current code-review ACKs, then (+stale ACKs) and -NACKs; greener = more ACKs.
Size: lines added or modified outside tests, then in tests; greener = smaller.
Ranking pass (2026-09-17): all PRs here were compared with each other; 5 notes on review order, overlaps, and band changes.

Covers

Block template construction and everything a miner or pool interacts with: the block assembler, getblocktemplate and related RPCs, the Mining interface and its IPC exposure, template update logic (fee inflow, new tip, waitNext), the bitcoin-mine program, and the tests for these. A mining PR that adds or changes an interfaces::Mining method or its capnp definition is mining first and ipc second. The Mining label is a strong prior.

Not mining: general IPC infrastructure that the mining interface happens to use (that is ipc); mempool policy that affects which transactions are eligible (that is mempool).

What matters here

Template validity above all: a template that produces an invalid block loses the block reward. Then correctness of fee and weight accounting, and of template updates as the mempool and tip change. Then latency and resource use of template generation, which pools feel per block. Then completeness and stability of the interface external miners build on (Stratum v2 template providers are the current consumer). Then developer-facing tooling.

Changes whose benefit is a small fraction of a block's fees, weighed against any risk of invalidity, rank low; say so with the numbers when the discussion has them.

generated 2026-09-17 21:55 UTC