(+)#35793 darosior Implement BIP 54 (Consensus Cleanup) without mainnet activation- Protect the network against known consensus attacks including timewarp exploits and Merkle tree collisions
- Prevent severe block validation delays caused by excessive legacy signature operations
| P2 · DoS protection- P1 because it addresses critical consensus vulnerabilities including timewarp exploits and CVE-2017-12842
- Eliminates block validation denial-of-service vectors caused by legacy signature operations
- Enforces new consensus soft fork rules requiring thorough review before activation
| Ready- Ready for review
- Cleanly rebased on master with passing CI and all feedback addressed
| 0 | Strong- Broad concept support across contributors and maintainers
- Concept approval without stated reasons (dergoegge, fanquake, theStack, hsjoberg, stickies-v)
- Detailed review on sigops limits and timewarp mitigations with concerns addressed (ariard, polespinasa)
- Collaborated on mining template enforcement merged in a prior PR (fjahr)
| 151 + 6,433 tests- 151 lines added or modified outside tests
- 6,433 lines added or modified in tests
- 123 lines removed in total
- 39 files, 22 commits
|
(+)#34132 l0rinc coins, dbwrapper: remove error catcher, make point-read failures fatal- Prevent database read failures and corruption from masquerading as missing coins
- Safely shut down the node instead of running with corrupt chainstate or rejecting valid transactions
- Simplify the coin view stack by eliminating the dedicated error catcher layer
| P2 · cleanup- P2 because it prevents corrupt database entries from masquerading as missing inputs during validation
- Avoids silent node operation with corrupt state that could reject valid blocks and transactions
- Simplifies coin view lookups across chainstate and index databases
| Ready- Ready to review
- Clean state and CI passes after recent rebase
| 1 (+1) | Mild- General agreement on treating database read errors as fatal and simplifying the view stack
- Approval of code and test coverage (optout21)
- Concept approval for removing indirection (andrewtoth, sedited)
- Open concern whether corrupt optional indexes should crash the whole node (ajtowns)
| +292/-381 |
(+)#36000 l0rinc validation: prefetch blocks while connecting- Overlap block read I/O with validation during initial sync, reindexing, and reorgs
- Significantly reduces sync and reindex times for node operators
| P2 · speedup- P2 because it brings double-digit performance gains to core block connection
- Reduces wall-clock time by 13-15% for IBD and 35-50% for reindexing for node operators
| Ready | 1 | Mild- Strong support with independent benchmarks verifying speedups (andrewtoth)
- Verified double-digit speedups for IBD and up to 35% on reindexing (andrewtoth)
- Minor suggestion to clear the queue when an invalid block is found (w0xlt)
| 147 + 44 tests- 147 lines added or modified outside tests
- 44 lines added or modified in tests
- 9 lines removed in total
- 9 files, 6 commits
|
(+)#36149 mzumsande validation: Leave pruned blocks in `m_blocks_unlinked`, fix another `nSequenceId` issue- Prevent debug crashes and block candidate corruption when handling pruned stale forks
- Ensure late-arriving ancestor blocks can properly propagate transaction counts
- Allow fuzz testing to safely exercise pruning on out-of-chain blocks
| P2 · bug fix- P2 because it fixes assertion crashes and candidate corruption during block redownloads
- Addresses rare crashes triggered by debug checks when stale forks are pruned
- Enables fuzzers to explore out-of-chain pruning paths without hitting false crashes
- Ranking pass: moved up: it is the only one of the crash/assert cluster with confirmed reproducers (#31512, #36021) and fuzz verification
| Author reworking- Wait for author to finish exploring an alternative conditional removal approach before reviewing
| 1 | Strong- Strong support with full review and fuzz reproduction
- Verified the fixes for unlinked chain tracking and candidate set ordering (marcofleon)
- Verified fuzz reproduction of candidate corruption on existing seeds (jeanpablojp)
- Concept approval without objections (l0rinc)
| 30 + 39 tests- 30 lines added or modified outside tests
- 39 lines added or modified in tests
- 37 lines removed in total
- 5 files, 4 commits
|
(+)#31989 jamesob BIP-119 (OP_CHECKTEMPLATEVERIFY) (regtest only)- Let contract and protocol developers test covenants and vault architectures on regtest
- Addresses the lack of native primitives in Script to constrain output spending
| P2 · decision needed- P2 because deciding whether Core should ship experimental consensus opcodes is a major milestone
- It strategically shapes the future validation layer and smart contracting roadmap for covenants
- Ranking pass: moved down: grouped with the other undecided soft-fork implementations; the decision value is real but below concrete correctness and performance work
| Needs rebase- Needs rebase due to merge conflicts across several files
- Author has been inactive since July 2025
| 0 (+1) -2 | Blocked- Blocked by objections against adopting consensus soft forks without broader community consensus
- Unaddressed objection: premature without widespread community consensus (darosior, BitcoinErrorLog)
- Concept approval because it is a minimal extension of script capabilities (ariard, jaybny)
| 244 + 3,439 tests- 244 lines added or modified outside tests
- 3,439 lines added or modified in tests
- 23 lines removed in total
- 33 files, 9 commits
|
(+)#29247 arminsabouri CAT in Tapscript (BIP-347)- Allows Tapscript to concatenate stack elements for advanced covenant and contract designs
- Provides a reference implementation for protocol developers and users to evaluate BIP-347 on testnets
| P2 · decision needed- P2 because a working implementation is essential for evaluating whether to adopt the soft fork
- Resolving exact opcode semantics and edge cases is critical to deciding the path forward on BIP-347
- Ranking pass: moved down: same soft-fork decision-needed grouping as #31989/#32247/#36122
| Author silent- Author has been silent for over four months
- Maintainers converted the pull request to draft pending community consensus on the soft fork
| 0- No review verdicts recorded
| Disputed- Drafted because concept consensus for the soft fork does not yet exist (achow101)
- Cannot be merged even if the code is acceptable until consensus is reached (achow101)
- Concern that unrestricted output sizes allow unintended introspection and covenants (moonsettler)
- Acknowledged the need to pause and wait for wider consensus (EthanHeilman)
| 46 + 742 tests- 46 lines added or modified outside tests
- 742 lines added or modified in tests
- 7 lines removed in total
- 9 files, 3 commits
|
(+)#35744 l0rinc coins: prevent DB resize from invalidating cursors- Prevent node crashes during concurrent UTXO scans and AssumeUTXO cache rebalancing
- Ensure UTXO database iterators remain valid when resizing the cache
| P2 · bug fix- P2 because it prevents node aborts during concurrent UTXO scans and AssumeUTXO rebalancing
- Keeps database iterators valid until destroyed so cache resizing cannot trigger crashes
| Ready- Ready for review
- Cleanly addresses reviewer feedback with passing CI and unit tests
| 0 | Strong- Strong collaboration shaping the shared mutex and sync framework design (andrewtoth)
- Suggested integrating shared locks into lockorder tracking with non-LIFO releases (andrewtoth)
- Concept approval without stated reasons (sedited)
| 89 + 105 tests- 89 lines added or modified outside tests
- 105 lines added or modified in tests
- 49 lines removed in total
- 9 files, 8 commits
|
(+)#36244 w0xlt validation, net: Process blocks asynchronously and reduce cs_main contention- Keep nodes responsive to peers and avoid network latency spikes while validating incoming blocks
- Ensure compact block responses and regular peer messaging stay fast during heavy validation load
| P2 · speedup- P2 because it mitigates validation lock contention on the main critical section
- Unblocks future architectural improvements such as parallel sibling block validation
| Ready- Ready for review now, passing CI with extensive unit and regression test coverage
| 0- No review verdicts recorded
| Crickets- Early architectural discussion is positive with no objections raised
- Points out steady-state message processing and compact-block serving as key benefits (andrewtoth)
- Notes that it enables eventual parallel validation of competing sibling blocks (andrewtoth)
| 889 + 2,245 tests- 889 lines added or modified outside tests
- 2,245 lines added or modified in tests
- 294 lines removed in total
- 41 files, 20 commits
|
(+)#35714 l0rinc validation: stop writes after flush failure- Prevent database corruption by stopping metadata flushes immediately if block file writes fail
- Avoid falsely marking block data as available when underlying block or undo writes did not persist
| P2 · bug fix- P2 because it prevents chainstate and block index desynchronization during disk I/O errors
- Avoids recording durable block status when block files fail to fsync or write completely
| Ready- Ready to review: small self-contained change with passing CI and resolved reviewer questions
| 1 (+1) | Strong- Strong support for halting writes immediately on flush failures
- Concept approval highlighting corruption risks with separate -blocksdir storage (mzumsande)
- Verified by testing failure handling and unit test coverage (optout21)
- Confirmed the logic gap is closed and opened a follow-up refactor (arejula27)
| 2 + 26 tests- 2 lines added or modified outside tests
- 26 lines added or modified in tests
- 3 lines removed in total
- 2 files, 2 commits
|
(+)#29491 fjahr [EXPERIMENTAL] Schnorr batch verification for blocks- Speed up initial block download and block validation on Taproot-heavy blocks
- Batch-verify Schnorr signatures during block connection across worker threads
| P2 · speedup- P2 because accelerating block connection and initial block download directly helps node operators
- Substantially increases throughput on synthetic Schnorr blocks once queue contention is resolved
| Ready- Ready for code review and benchmarking, though upstream secp256k1 dependency is not yet merged
| 0- No review verdicts recorded
| Strong- Collaborative support focused on threading architecture and benchmarking (andrewtoth, Eunovo)
- Recommended per-thread batches to avoid worker mutex contention (andrewtoth)
- Co-authored queue optimizations and provided comparative speedup benchmarks (Eunovo)
- Identified performance bottlenecks where earlier iterations were slower than master (0xB10C, willcl-ark)
| 2,452 + 287 tests- 2,452 lines added or modified outside tests
- 287 lines added or modified in tests
- 182 lines removed in total
- 56 files, 11 commits
|
(+)#32247 jamesob BIP-348 (OP_CHECKSIGFROMSTACK) (regtest only)- Allow developers to experiment with covenants and LN-Symmetry on regtest using OP_CHECKSIGFROMSTACK
- Enable testing arbitrary stack signature verification in Tapscript without risking mainnet consensus
| P2 · new feature- P2 because it enables practical experimentation with proposed covenant designs on regtest
- Validating consensus correctness and script semantics is strategically valuable for the network roadmap
| Needs rebase- Needs rebase and has merge conflicts with master
- Author has been silent for over 400 days
| 0 (+1) | Positive- Broad support with no blocking objections to regtest implementation
- Code review ACK noting implementation matches BIP semantics (JeremyRubin)
- Contributed functional tests covering edge cases and sigops budgets (instagibbs)
- Concept approval without stated reasons (jonatack, shahsb, yuvicc, delta1)
| 135 + 161 tests- 135 lines added or modified outside tests
- 161 lines added or modified in tests
- 12 lines removed in total
- 20 files, 3 commits
|
(+)#36122 fjahr BIP460: CISA for Taproot key path spends- Cut transaction fees and witness size by aggregating signatures across multiple inputs.
- Encourage collaborative transactions like Payjoin and CoinJoin by removing per-input signature overhead.
| P2 · new feature- P2 because cross-input signature aggregation offers substantial block space savings across transactions
- Consensus rule changes require extensive scrutiny to ensure batch verification and validation safety
- Ranking pass: moved down: explicitly opened as an experimental companion to the BIPs, the least decision-ready of the soft-fork group
| Needs rebase- Wait for a rebase to resolve merge conflicts.
- Author noted this is a draft reference implementation not yet intended for upstream merge.
| 0- No review verdicts recorded
| Mild- Commended consensus and policy test coverage after running local tests (BarneyChambers)
- Reported three bugs in wallet signing and PSBT aggregation that break completion states (BarneyChambers)
- Author has not yet replied to the reported wallet issues
| 7,784 + 3,504 tests- 7,784 lines added or modified outside tests
- 3,504 lines added or modified in tests
- 488 lines removed in total
- 133 files, 22 commits
|
(+)#32427 sedited kernel: Replace leveldb-based BlockTreeDB with WAL and .dat file based store- Allow external tools and indexers to read block data concurrently without stopping bitcoind
- Remove single-process locking constraints on block tree storage
| P2 · cleanup- P2 because replacing the block index storage engine affects disk persistence across all full nodes
- Carries broad leverage by swapping core storage and adding an automated startup migration
| Author reworking- Hold off review because the author converted to draft to rework concurrent reading and WAL threading
- Branch also needs a rebase
| 0 (+6)- Stale ACK: willcl-ark, w0xlt, josibake, janb84, alexanderwiederin, yuvicc
- Approach ACK: edilmedeiros
- Concept ACK: theuni, ismaelsadeeq, marcofleon, l0rinc, stickies-v, HowHsu, craigraw
| Mild- Strong concept support for removing LevelDB locking constraints (theuni, josibake, stickies-v, marcofleon)
- Concerns about read-mode interactions with unapplied WAL files and lock ownership (willcl-ark)
- Technical feedback on WAL atomicity and platform-specific flush edge cases (stickies-v)
- Author converted to draft to redesign parallel readers and threaded WAL processing (sedited)
| 988 + 769 tests- 988 lines added or modified outside tests
- 769 lines added or modified in tests
- 201 lines removed in total
- 31 files, 10 commits
|
(+)#35906 purpleKarrot First steps towards a stateless, side-effect free validation library- Allow consensus header and block validity checks to be tested directly without full node block ingestion
- Make validation logic stateless and free of hidden side effects to support a modular validation library
| P2 · test coverage- P2 because it brings direct unit tests to core consensus checks that previously needed full block ingestion
- Removes hidden side effects from consensus checks and advances modular, stateless validation architecture
| Ready- Ready for review with passing CI and clean mergeability
- Only minor test nits remain open on the latest revision
| 1 (+1) | Strong- Strong support for decoupling validation checks to enable direct testing (optout21, janb84, josibake)
- Support because it simplifies inputs and tests error cases cleanly (optout21)
- Verified by testing that direct validation testing is a major improvement (janb84)
- Support for comprehensive consensus tests and explicit validation timing (josibake)
- Concept approval without stated reasons (yuvicc)
| 46 + 809 tests- 46 lines added or modified outside tests
- 809 lines added or modified in tests
- 37 lines removed in total
- 6 files, 7 commits
|
(+)#35307 shuv-amp blockstorage: keep snapshot base in normal blockfile range- Prevent node crashes and false database corruption errors during assumeutxo background validation
- Ensures nodes do not fail startup or require reindexing if the snapshot base block arrived out-of-band
| P3 · bug fix- P3 because it prevents an irrecoverable abort or false database corruption error in assumeutxo validation
- The crash only triggers if the base block was submitted out-of-band before loading the snapshot
- Ranking pass: raised to P2: an unrecoverable abort / false corruption error requiring reindex is the same class of chainstate-integrity failure as #35744 and #36149, which sit at P2
| Ready- Ready for review: rebased, passes CI, and includes functional test coverage
| 0- No review verdicts recorded
| Neutral- Neutral feedback focused on the realism of the failure scenario
- Questioned why someone would load a snapshot when already at that block height (mzumsande)
- Author explained that out-of-band block submissions create an accepted state that crashes without a fix
| 32 + 53 tests- 32 lines added or modified outside tests
- 53 lines added or modified in tests
- 26 lines removed in total
- 5 files, 1 commits
|
(+)#35003 furszy validation: improve block data I/O error handling in P2P paths- Prevent block storage I/O failures from leaving nodes silently stuck unable to advance the chain
- Trigger graceful shutdown instead of ungraceful aborts when disk access fails during peer requests
| P3 · bug fix- P3 because it prevents a rare bug where an inaccessible disk leaves a node stuck instead of halting
- A hung chain activation leaves the node alive but silently degraded and unable to process new blocks
| Author silent 70d- Author silent for 70 days following an approach objection and broader architectural questions
| 1 (+4) -1 | Disputed- Approach objection to returning null pointers instead of preserving filesystem exceptions (josibake)
- PR cannot be merged as-is without deciding a unified error-handling strategy across paths (maflcko)
- Author defended consistency with existing callers but has not replied since July (furszy)
| 15 + 533 tests- 15 lines added or modified outside tests
- 533 lines added or modified in tests
- 7 lines removed in total
- 10 files, 5 commits
|
(+)#35557 ryanofsky kernel, validation: Add btck_chainstate_manager_set_clock_time- Allow kernel users and multi-instance tests to mock time per instance without relying on global state
- Prevent kernel validation code from accidentally calling nondeterministic host system clocks
| P3 · cleanup- P3 because routing time through validation logic cleans up scattered direct clock queries
- Fixes an edge-case race condition in chainstate manager initial block download tests
| Ready- Ready to review: branch builds cleanly, passes CI, and is actively maintained across rebases
| 0- No review verdicts recorded
| Strong- Positive sentiment with constructive review on typing, testing, and clock ergonomics
- Supported keeping the changes unified and requested scoped clock tests (sedited)
- Commended the test race fix and suggested using a fake clock (seduless)
- Questioned whether this is still necessary after global mock time merged (maflcko)
| 172 + 86 tests- 172 lines added or modified outside tests
- 86 lines added or modified in tests
- 99 lines removed in total
- 31 files, 6 commits
|
(+)#36280 furszy validation: throw when a compressed script can't be decompressed- Fail explicitly on corrupted compressed scripts instead of silently treating them as empty scripts
- Prevents corrupt UTXO database or undo data from quietly yielding anyone-can-spend outputs
| P3 · bug fix- P3 because it fixes error handling for corrupted UTXO and undo data
- Requires database corruption to trigger in practice, limiting real-world impact
- Prevents severe misinterpretation of corrupt records as anyone-can-spend coins
- Ranking pass: moved up: corrupt records silently becoming anyone-can-spend is the most consensus-relevant of the corruption-handling P3s, pairs with #34132
| Ready- Ready for review with passing CI, unit tests, and fuzz coverage
| 0 | Positive- Positive early sentiment with no objections raised
- Concept approval without stated reasons (sedited)
| 7 + 54 tests- 7 lines added or modified outside tests
- 54 lines added or modified in tests
- 4 lines removed in total
- 3 files, 2 commits
|
(+)#35938 kwsantiago blockstorage: fail instead of storing a null XOR key over a lost one- Prevent node from overwriting a missing block obfuscation key with a null key
- Stop prompting users to run a destructive reindex that silently wipes valid block storage
- Fail startup with an explicit error directing users to restore the key file or resync
| P3 · bug fix- P3 because prevents destructive reindexing that resets valid block data when one key file is lost
- Limited impact because it requires out-of-band file deletion or external storage faults to trigger
- Ranking pass: moved up: prevents irreversible loss of otherwise recoverable block data, ranked with the other data-integrity P3s
| Ready | 0 -1 | Disputed- Concept NACK arguing recovery from local tampering is low priority (l0rinc)
- Prefers improving corruption detection over special-casing unreadable block files (sedited)
| 41 + 22 tests- 41 lines added or modified outside tests
- 22 lines added or modified in tests
- 0 lines removed in total
- 2 files, 1 commits
|
(+)#35195 l0rinc coins: cache UTXO outpoint hash codes- Speed up UTXO cache lookups during Initial Block Download and AssumeUTXO loading
- Trade a small amount of memory to avoid recomputing hashes on table operations
| P3 · speedup- P3 because it speeds up Initial Block Download and AssumeUTXO sync times
- Yields modest validation performance gains by optimizing UTXO cache lookups
| Needs rebase- Review is blocked by merge conflicts and author inactivity
| 0 | Strong- Concept approval because benchmarks show speedup justifies memory use (optout21)
- Open question whether caching should use __is_fast_hash instead (optout21)
| 4 + 17 tests- 4 lines added or modified outside tests
- 17 lines added or modified in tests
- 7 lines removed in total
- 2 files, 2 commits
|
(+)#34864 l0rinc coins: tighten cache entry state invariants- Prevent unreachable and contradictory states in the UTXO cache
- Protect consensus-critical cache synchronization from logic bugs around coin spending and updates
| P3 · cleanup- P3 because it hardens internal UTXO cache state invariants against logic errors
- Does not fix an active bug or affect user-facing behavior
| Ready- Worthwhile to review now; code is clean, CI passes, and all reviewer feedback has been addressed
| 1 | Strong- Broad agreement on making invalid cache states unrepresentable
- Support for maintainability benefits from making invalid states impossible (optout21)
- Concept approval without stated reasons (andrewtoth)
- Verified by running coins fuzz targets without errors or crashes (ptrinh)
| 90 + 60 tests- 90 lines added or modified outside tests
- 60 lines added or modified in tests
- 192 lines removed in total
- 9 files, 9 commits
|
(+)#35646 yuvicc RFC: Separate out runtime errors from BlockValidationState using `util::Expected`- Stop conflating internal runtime failures like disk write errors with peer-penalizing block invalidity
- Separate internal system faults from consensus rejection logic across block processing
| P3 · cleanup- P3 because it cleans up core validation invariants without fixing an active bug or performance bottleneck
- Unblocks further modernization of validation routines and error propagation
- Ranking pass: moved down slightly: overlaps #29700 and needs an approach decision before either is worth deep line review
| CI failing- CI is failing and reviewers asked to split the large commit into smaller steps before detailed review
| 0 | Positive- Broad concept support for separating runtime errors from block validation results
- Concept approval citing enforced error handling and less risk of conflating errors (optout21)
- Concept approval welcoming the direction but requesting piecemeal commits (hodlinator)
| 373 + 244 tests- 373 lines added or modified outside tests
- 244 lines added or modified in tests
- 384 lines removed in total
- 41 files, 5 commits
|
(+)#35751 andrewtoth validation: use parallel input prevout fetching in TestBlockValidity- Speeds up block template validation for miners and Stratum v2 services
- Prevents dummy template checks from polluting the main coins cache
| P3 · speedup- P3 because it speeds up block template checking by roughly ten percent on full blocks
- The benefit applies to template assembly and Stratum v2 checks but leaves normal tip advancement unchanged
- It does not affect consensus rules or block connection during initial block download
- Ranking pass: moved up: a measured ~10% win on a real workload ranks above the untested cleanups it was sitting among
| Waiting on author- Wait for the author to push an agreed reentrancy assert before reviewing
| 0 (+1) | Disputed- Concept approval for improving template verification performance for Stratum v2 (Sjors)
- Support for the performance improvement building on earlier parallel fetching work (optout21)
- Blocking objection on potential reentrancy issues awaits a promised assert fix (l0rinc)
| 14 + 25 tests- 14 lines added or modified outside tests
- 25 lines added or modified in tests
- 7 lines removed in total
- 3 files, 2 commits
|
(+)#33637 l0rinc refactor: optimize block index comparisons (1.4-6.8x faster)- Speed up block index comparisons performed during block tracking and validation
- Reduces CPU overhead on frequent comparison paths during node operation
| P3 · speedup- P3 because micro-optimizing comparator operations provides isolated speedups on specific checks
- The overall speedup yields minimal perceptible impact on node performance or initial block download
| Ready- Ready for review
- CI is passing and previous reviewer feedback has been addressed
| 1 (+1) | Strong- Strong support for optimizing and modernizing comparison hot paths
- Approved the simplified comparison approach (laanwj)
- Approved the localized hot-path micro-optimization (optout21)
- Concept support for the performance improvements (mzumsande, Raimo33)
| 26 + 221 tests- 26 lines added or modified outside tests
- 221 lines added or modified in tests
- 44 lines removed in total
- 12 files, 7 commits
|
(+)#34254 mzumsande validation: Prevent duplicate logging and looping in invalid block handling- Prevent redundant block index traversals and duplicate log entries when handling invalid blocks
- Clean up and clarify validation control flow during invalid block processing
| P3 · cleanup- P3 because it eliminates redundant block index iterations and repeated log lines during block validation
- Performance and log cleanups only trigger during rare invalid block events or manual invalidations
- Helps untangle historical validation duplication and clarifies control flow
| Ready- Ready for review
- CI is passing and prior review concerns have been addressed
| 1 (+1) | Strong- Strong support for cleaning up redundant loops and logs in chain activation (Crypt-iQ, stratospher)
- Concept approval of the refactoring approach (frankomosh, stratospher)
- Prior concern about missing updates for inactive blocks resolved with a regression test (Crypt-iQ)
| +64/-30 |
(+)#35873 jeanpablojp test: add a tx_valid vector for CVE-2024-38365- Add a positive test vector verifying transactions where embedded signatures survive inside pushdata
- Protects downstream implementations and future refactors against consensus regressions from CVE-2024-38365
| P3 · test coverage- P3 because it adds regression test coverage for a consensus edge case that split another implementation
- Pins critical script evaluation behavior against regressions where Core only tested failure paths
| Ready- Ready for review: clean 7-line test vector change passing CI
| 1 | Strong- Strong support with no open objections
- Verified by mutation testing that btcd-style deletion fails the test (sedited)
| 0 + 7 tests- 0 lines added or modified outside tests
- 7 lines added or modified in tests
- 0 lines removed in total
- 1 files, 1 commits
|
(+)#36231 ViniciusCestarii test: add pow tests covering live mutants- Add unit tests for proof-of-work and difficulty calculation edge cases found via mutation testing
- Protects consensus and header-sync validation from future regressions
| P3 · test coverage- P3 because it improves unit test coverage over core consensus and header-sync proof-of-work logic
- Kills live mutants in consensus-critical code to guard against future regressions without fixing active bugs
- Ranking pass: moved up: consensus/pow regression coverage grouped with the other test-vector PRs
| Ready- Ready for review: the patch is small, cleanly rebased, and passes CI
| 1 | Strong- Strong support after author addressed setup suggestions in revision (brunoerg)
- No open concerns remain
| 0 + 67 tests- 0 lines added or modified outside tests
- 67 lines added or modified in tests
- 0 lines removed in total
- 1 files, 4 commits
|
(+)#33324 l0rinc blocks: add resumable reobfuscation for existing block files- Allow node operators to obfuscate existing block files or rotate keys without redownloading the chain
- Protects pre-v28 datadirs from false-positive antivirus scanner deletion or quarantine
| P3 · new feature- P3 because it helps operators with pre-v28 datadirs protect block files from antivirus false positives
- Avoids having to redownload the entire blockchain to obfuscate or rotate keys
- It is an optional one-off migration and existing nodes run fine without it
- Ranking pass: moved down: one-off optional migration, below the correctness and performance P3s
| Needs rebase- Needs rebase against master due to merge conflicts
| 0 (+1) | Positive w/ caveats- General support for the migration feature, but architectural debate remains on the interface
- Approval after hardening error handling and argument parsing (sedited)
- Prefers an external CLI tool rather than adding another daemon startup option (stickies-v, luke-jr)
- Contributed improvements for streaming chunks and timestamp preservation (ajtowns)
| 276 + 175 tests- 276 lines added or modified outside tests
- 175 lines added or modified in tests
- 43 lines removed in total
- 15 files, 9 commits
|
(+)#35187 sedited kernel: Block validation without a complete UTXO set- Allow external library consumers to validate blocks without maintaining a full local UTXO database
- Enables stateless verification for downstream projects like rust-bitcoinkernel
| P3 · new feature- P3 because it exposes a check-only validation helper without altering internal node validation
- Serves primarily as a backing implementation for the kernel API rather than core node logic
| Needs rebase- Needs rebase against master due to merge conflicts
| 0 (+2) | Blocked- Concept approval for stateless block validation (yuvicc, nervana21)
- Verified by implementing a prototype test suite in rust-bitcoinkernel (alexanderwiederin)
- Prefers an in-memory coin container over dynamic callbacks to prevent inconsistent lookups (ajtowns)
- Questioned whether assumevalid logic should bypass script checks during standalone validation (nervana21)
| 242 + 119 tests- 242 lines added or modified outside tests
- 119 lines added or modified in tests
- 0 lines removed in total
- 6 files, 5 commits
|
(+)#36049 l0rinc streams: avoid termination on buffered write failure- Prevent abrupt node crashes when encountering storage errors during block writing
- Allow standard storage error handling and graceful shutdown when disks run out of space
| P3 · bug fix- P3 because it routes block write errors to standard storage failure handling rather than hard aborts
- Applies only to failure recovery paths when storage runs out of space or fails
| Ready- Ready for review as the patch is small and CI is passing
| 0 | Strong- General agreement that the bug exists and should be addressed
- Concept approval after independently hitting the identical bug (w0xlt)
- Inquired whether terminating was acceptable for storage errors, which author resolved (andrewtoth)
| 6 + 14 tests- 6 lines added or modified outside tests
- 14 lines added or modified in tests
- 3 lines removed in total
- 3 files, 3 commits
|
(+)#29700 ryanofsky kernel, refactor: return error status on all fatal errors- Return fatal error details programmatically instead of aborting the node process during validation
- Let libbitcoinkernel users handle critical failures directly without relying on notification callbacks
| P3 · cleanup- P3 because changes across validation routines are purely refactoring without changing runtime behavior
- Updates function signatures to thread return values through without altering core validation logic
| Review #25665 first | 0- No review verdicts recorded
| Blocked- Blocked by an unaddressed approach objection
- Unaddressed objection: Result-style error handling is unidiomatic and harms performance (purpleKarrot)
- Nonblocking objection: nesting interrupt results inside error results invites unhandled stops (maflcko)
- Approval without detailed technical analysis (Graysonbarton)
| 1,314 + 440 tests- 1,314 lines added or modified outside tests
- 440 lines added or modified in tests
- 675 lines removed in total
- 55 files, 22 commits
|
(+)#35861 fjahr Testnet 5 (BIP95)- Add parameters and configuration for Testnet 5 to provide a reliable public test network
- Prevent hash rate manipulation and block storms seen on prior testnets by dropping the 20-minute rule
- Enable testing of modern consensus cleanup rules enforced from genesis
| P3 · new feature- P2 because it fixes recurring public testnet stability failures by removing exploitable difficulty resets
- Enables ecosystem-wide validation testing of consensus cleanup rules from genesis
| Needs rebase- Review #35793 first
- Branch has merge conflicts, failing CI, and awaits a mined genesis block
| 0- No review verdicts recorded
| Crickets- No reviews or concept feedback yet
| 317 + 6,426 tests- 317 lines added or modified outside tests
- 6,426 lines added or modified in tests
- 129 lines removed in total
- 59 files, 25 commits
|
(+)#32575 fjahr consensus: Remove special treatment for single threaded script checking- Unify script verification dispatch so single-threaded and multithreaded execution share one path
- Eliminate dual-purpose behavior to make block validation easier to reason about and maintain
- Help unblock future consensus verification optimizations like batch verification
| P3 · cleanup- P3 because it is an internal cleanup of block validation logic that does not fix an active bug
- Has neutral performance while removing hard-to-follow dual paths in consensus script checks
- Provides modest leverage by unblocking future consensus optimizations like batch verification
| Author silent- Author has been silent for over three months though all pending review feedback was addressed
- Review is worthwhile to help resolve the outstanding approach disagreement
| 0 -1 | Disputed- Broad concept support for simplifying block script verification flow (theuni, sedited, darosior, Eunovo)
- Confirmed no measurable performance regression across single-threaded benchmarks (svanstaa, l0rinc)
- Approach objection that combining consensus changes with refactoring is too risky (l0rinc)
- Author declined to split the changes into separate PRs
| 90 + 17 tests- 90 lines added or modified outside tests
- 17 lines added or modified in tests
- 85 lines removed in total
- 4 files, 6 commits
|
(+)#34534 fjahr rpc: Manual prune lock management (Take 2)- Prevent needed blocks from being pruned when external or offline wallets are temporarily unloaded
- Allows wallets to rescan against pruned nodes without having to manage full manual pruning logic
| P3 · new feature- P3 because it hooks into existing block storage prune locks without changing validation rules
- Held locks can cause disk consumption to temporarily exceed configured prune targets
- Ranking pass: moved up: an actual user-facing capability for pruned-node operators outranks the pure cleanups below it
| Ready- Ready for review; CI passes and earlier reviewer feedback has been addressed
| 0 (+1) | Positive- Generally positive sentiment on supporting unloaded wallet rescans
- Concept approval for the unloaded wallet rescan use case (stickies-v)
- Approval after thread safety feedback was resolved (sedited)
- Questioned whether existing manual pruning options already suffice (andrewtoth)
| +404/-1 |
(+)#33854 Eunovo fix assumevalid is ignored during reindex- Prevent fallback to slow full script verification when reindexing after an interrupted initial sync
- Ensure assumevalid applies even if the previous sync stopped before reaching minimum chainwork
| P3 · speedup- P3 because missing assumevalid only causes redundant script checks, keeping validation strictly safe
- Benefits only the rare scenario where an initial sync was interrupted before minimum chainwork
- Ranking pass: moved down: reviewers dispute that the rare interrupted-IBD case justifies the complexity, lowering confidence in the benefit
| Needs rebase- Needs rebase due to merge conflicts with the main branch
| 0 | Disputed- Concept approval verified with a reproducer (l0rinc)
- Thinks added complexity is not worth the benefit for a rare salvage scenario (sedited)
- Concerned about breaking offline reindexing and potential peer disconnects (sedited, mzumsande)
| 177 + 108 tests- 177 lines added or modified outside tests
- 108 lines added or modified in tests
- 96 lines removed in total
- 11 files, 8 commits
|
(+)#35662 l0rinc script: prevent stale sighash caches across transactions- Prevent stale sighash cache state from leaking across transactions or remaining uninitialized
- Avoid unnecessary memory allocation during assumevalid block connection
| P3 · cleanup- P3 because it hardens sighash cache lifetime against misuse and invalid reuse across transactions
- Saves an unnecessary vector allocation during assumevalid sync
| Ready- Ready for review; author addressed feedback with a rework and CI passes
| 0- No review verdicts recorded
| Neutral- Resolved objection against re-initialization by adopting construction-time initialization (sedited)
- Awaiting follow-up review after the rework
| 34 + 48 tests- 34 lines added or modified outside tests
- 48 lines added or modified in tests
- 74 lines removed in total
- 17 files, 4 commits
|
(+)#35511 hodlinator RFC: consensus: Make `CAmount` a class- Prevent accidental monetary bugs like invalid conversions or nonsensical math for developers
- Catch uninitialized coin values and invalid operations at compile time across the codebase
| P3 · type safety- P3 because it hardens monetary type definitions used throughout consensus checks
- Alters no consensus rules or validity semantics and is not urgent for consensus correctness
| Ready- Ready for review, the branch builds cleanly and passes CI
| 0 | Disputed- Broad concept support for stronger monetary type safety
- Concept approval without stated reasons (sedited)
- Prefers incremental migration over taking the entire codebase transition at once (ryanofsky)
- Changes requested: monolithic diff is too large and needs invariant clarification (l0rinc)
| 574 + 912 tests- 574 lines added or modified outside tests
- 912 lines added or modified in tests
- 1,258 lines removed in total
- 184 files, 12 commits
|
(+)#35570 optout21 refactor: Change some validation.cpp methods to return BlockValidationState- Prevent subtle errors where validation outcome flags contradict internal validation state
- Eliminate shared mutable error state across sequential block validation steps
| P3 · cleanup- P3 because it is an internal cleanup that does not change consensus rules or validation speed
- Benefit is modest, slightly reducing maintenance hazards when updating validation logic
| Ready- Ready for review as the branch merges cleanly and passes all automated tests
| 0 (+1) | Positive- Broad support across multiple contributors for simplifying validation return values
- Full code approval following review of edge cases and test fixes (arejula27)
- Nonblocking preference to land return-type improvements in #35646 first (hodlinator)
- Concept approval without stated reasons (w0xlt, purpleKarrot, stringintech, yuvicc, nervana21)
| 227 + 36 tests- 227 lines added or modified outside tests
- 36 lines added or modified in tests
- 226 lines removed in total
- 16 files, 14 commits
|
(+)#36066 optout21 validation: Separate check-only version of ConnectBlock- Clarify mutability guarantees when checking blocks without applying state updates
- Eliminate boolean check flags and mutable dummy objects in validation tests
| P3 · cleanup- P3 because it is a low-risk internal code cleanup with no performance or security impact
- Improves const correctness for developers and aligns with work toward stateless validation
| Ready- Ready for review
- Latest update addressed review feedback and resolved a silent fuzz test conflict
| 0 | Positive- Concept approval because separating the check-only path clarifies mutability (l0rinc)
- Noted that internal chainstate mutations remain until later stateless validation work (purpleKarrot)
| 60 + 5 tests- 60 lines added or modified outside tests
- 5 lines added or modified in tests
- 20 lines removed in total
- 4 files, 1 commits
|
(+)#35731 arejula27 Indexes: Harden the flush-error notification invariant- Ensure all block and undo file flush failures reliably trigger flush-error notifications by construction
- Add dedicated unit tests to verify error notifications fire during simulated I/O failures
| P3 · test coverage- P3 because this is defensive internal hardening that leaves current behavior unchanged
- Adds targeted test coverage to prevent future regressions in fatal storage error handling
| Review #35714 first- Review #35714 first
- CI is currently failing
| 0- No review verdicts recorded
| Crickets- No reviews or concept comments yet
- Opened as a follow-up to PR 35714 with no community feedback so far
| 18 + 103 tests- 18 lines added or modified outside tests
- 103 lines added or modified in tests
- 10 lines removed in total
- 5 files, 4 commits
|
(+)#35569 purpleKarrot Encapsulation for CTransaction- Decouple transaction internal storage representation from caller code
- Lay the groundwork for future transaction memory optimizations
| P3 · cleanup- P3 because it offers no immediate performance gains or bug fixes
- It establishes the foundation for future block memory allocation improvements
- Ranking pass: moved down: broad churn in consensus-critical code whose only payoff is speculative future work, and the concept itself is disputed
| Ready- Ready to review
- CI is passing and the mechanical migration is verified reproducible
| 2 -2 | Disputed- Concept objection: massive churn in consensus code with no immediate benefit (ajtowns)
- Approach objection: premature churn across call sites that should be split up (l0rinc)
- Supports decoupling caller code from transaction internal layout (josibake, ryanofsky)
- Verified the automated migration is reproducible and tests pass (alexanderwiederin)
| 407 + 203 tests- 407 lines added or modified outside tests
- 203 lines added or modified in tests
- 514 lines removed in total
- 93 files, 7 commits
|
(+)#29843 ajtowns policy: Allow non-standard scripts with -acceptnonstdtxn=1 (test nets only)- Allow transactions with non-standard scripts into the mempool on test networks using -acceptnonstdtxn=1
- Let developers test proposed soft forks on testnets without having to maintain custom node forks
| P3 · cleanup- P3 because it hardens the distinction between consensus and mempool policy script checks
- Enforces that consensus block script flags remain a strict subset of standard policy flags
| Ready- Reviewable now; CI is passing and open review feedback is a minor design question rather than a rework
| 0 | Mild- Broad concept and approach support for enabling soft-fork testing on test networks
- Helpful for experimenting with future soft-fork features on test networks (benthecarman)
- Concept approval without stated reasons (1440000bytes, glozow, fjahr)
- Nonblocking objection: goes beyond historical Knots behavior and should use another value (luke-jr)
- Questioned whether a compile-time wrapper could be replaced with a unit test (sedited)
| 104 + 45 tests- 104 lines added or modified outside tests
- 45 lines added or modified in tests
- 55 lines removed in total
- 6 files, 5 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 · cleanup- P4 because the chain activation refactor only serves callers that already hold the chainstate lock
- Internal adjustment that does not change consensus safety or validation throughput
| 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
|
(+)#35071 pinheadmz Reindex: save progress to continue after interruption- Save reindex progress on interruption so restarts resume from the last block file
- Avoids re-reading earlier block files and re-populating orphan maps after an interrupted reindex
| P4 · speedup- P4 because the performance optimization is speculative and weakly justified
- Master already skips block validation on restart leaving only quick sequential file reads
- Persisting orphan maps in the block database adds complexity for marginal gains in an edge case
| Author silent 132d- Author moved PR to draft to gather benchmarks and has been silent for 132 days
| 0- No review verdicts recorded
| Mild- Reviewers doubted whether re-reading block files without re-validation is meaningfully slow
- Pointed out master already skips validation on restart so scanning is very fast (mzumsande)
- Asked for flame graphs or benchmarks demonstrating substantial restart overhead (maflcko)
- Author moved PR to draft to measure real overhead but has not returned
| 69 + 59 tests- 69 lines added or modified outside tests
- 59 lines added or modified in tests
- 6 lines removed in total
- 3 files, 2 commits
|
(+)#35620 l0rinc leveldb: move unused block-cache budget to write buffers- Stop reserving database cache budget for an unused block cache on 64-bit systems
- Direct the unused cache budget toward database write buffers instead
| P4 · cleanup- P4 because reindexing benchmarks showed no meaningful speedup on SSDs
- Reindex benchmarks showed a slight slowdown on magnetic hard drives
- Tuning internal cache ratios without a measurable performance win is marginal
| Needs rebase- Wait for author update: the PR has merge conflicts and is drafted to investigate regressions
| 0- No review verdicts recorded
| Mild- Questioned maintaining special-cased logic for 32-bit systems (sedited, fanquake)
- Questioned whether giving indexes larger write buffers provides any benefit (sedited)
- Author put the PR in draft to investigate hard drive regressions and cleaner options (l0rinc)
| 5- 5 lines added or modified outside tests
- 0 lines added or modified in tests
- 2 lines removed in total
- 1 files, 2 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
| P4 · cleanup- The validation impact is purely incidental plumbing for the new validation interface notification signal and passing height to removeForBlock.
| 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
|
(+)#35229 optout21 refactor: Use CBlockIndex parameters as reference- Prevent accidental null dereferences by enforcing non-null invariants at compile time
- Protects developers from runtime null errors across chain and index logic
| P4 · cleanup- P4 because it is a routine internal cleanup with no consensus bug fixes or performance gains
- The benefit is limited to compile-time safety checks within internal chain state management
| Author silent- Author has been silent for 113 days, exceeding the stale author threshold
- Reviewing now may be unproductive until the author returns to address feedback
| 0 | Strong- Concept approved with broad agreement and no objections raised
- Support for compile-time safety and clearer non-null guarantees (musaHaruna)
- Concept approval without stated reasons (stickies-v, w0xlt)
- Suggested using reference wrappers for internal chain storage (maflcko)
| 71 + 7 tests- 71 lines added or modified outside tests
- 7 lines added or modified in tests
- 68 lines removed in total
- 12 files, 7 commits
|
(+)#35271 tomt1664 Update CoinsView::NeedsUpgrade to add additional checks- Prevent false positives where nonstandard or downstream chainstates trigger legacy database upgrades
| P4 · bug fix- P4 because legacy UTXO format was deprecated long ago and Core does not trigger this false positive
- The benefit applies strictly to downstream projects rather than standard node operations
| Author silent- Author is inactive with failing CI linter and an unanswered question whether to close
| 0- No review verdicts recorded
| Neutral- No reviewers have endorsed merging this into Core
- Reopened out of courtesy for downstream projects after initially closing it (sedited)
- Questioned whether Bitcoin Core databases ever write keys that trigger this condition (l0rinc)
- Asked whether the author is still working on this or if it should be closed (maflcko)
| 2- 2 lines added or modified outside tests
- 0 lines added or modified in tests
- 1 lines removed in total
- 1 files, 1 commits
|