Daily cherry pick #35325

pull rustaceanrob wants to merge 48 commits into bitcoin:master from rustaceanrob:26-5-19-cp changing 1229 files +1110 −500144
  1. rustaceanrob commented at 8:38 PM on May 19, 2026: contributor

    No description provided.

  2. build: remove GUI (bitcoin-qt) from build system
    Remove all CMake options, modules, and deployment logic related to the
    Qt GUI: BUILD_GUI, WITH_QRENCODE, WITH_DBUS, BUILD_GUI_TESTS, Qt 6.2
    package discovery, FindQt.cmake, FindQRencode.cmake, the macOS app
    bundle deploy target, and share/qt translation/plist files. Update the
    Windows NSIS installer and ENABLE_IPC description accordingly.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    b6ee635472
  3. test: remove GUI test suite (test_bitcoin-qt)
    Remove src/qt/test/ entirely and clean up references to test_bitcoin-qt
    in src/test/README.md and doc/files.md.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    93b08fbbc0
  4. gui: remove src/qt/, init stubs, and all GUI references
    Delete the entire src/qt/ directory, both GUI init implementations
    (bitcoin-qt.cpp, bitcoin-gui.cpp), the Qt translation lint script, and
    the Qt translation process doc. Update all references to bitcoin-qt and
    bitcoin-gui throughout source files, CI scripts, contrib tools, and
    documentation.
    ed019a8f53
  5. gui: remove remaining Qt/GUI references from CI, docs, and config
    Remove -DBUILD_GUI=OFF and Qt package dependencies from CI scripts,
    drop -DBUILD_GUI_TESTS=OFF from guix and libmultiprocess build scripts,
    delete the Transifex config, and remove translation workflow references
    from README, CONTRIBUTING, and release docs.
    77a107b810
  6. Merge pull request #4 from rustaceanrob/26-5-12-rm-gui
    Remove the GUI
    f4e5202db6
  7. nuke: wallet + psbt + external-signer (src, build, deps, ci, tests, docs) (#5)
    Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    e35ca827de
  8. nuke: indexes + compact-filters (src, build, ci, tests, docs) (#7)
    Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    1d2d308388
  9. nuke: assumeutxo (#8)
    * nuke: assumeutxo (commit 1 of 3) - drop user-facing surface
    
    Delete loadtxoutset and getchainstates RPCs, empty all chains' m_assumeutxo_data,
    drop feature_assumeutxo.py, tool_bitcoin_chainstate.py and utxo_snapshot fuzz target,
    delete the now-orphan snapshot-related unit tests.
    
    The snapshot machinery (ActivateSnapshot, PopulateAndValidateSnapshot, etc.) is
    still in place but unreachable from outside the binary. Removed in the next commit.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    
    * nuke: assumeutxo (commit 2 of 3) - rip snapshot machinery
    
    Delete AssumeutxoHash/AssumeutxoData/AssumeutxoForHeight/ForBlockhash and
    GetAvailableSnapshotHeights from chainparams. Delete ChainstateRole, the
    Assumeutxo enum, SnapshotMetadata, SnapshotCompletionResult, and the
    m_from_snapshot_blockhash / m_target_blockhash / m_target_utxohash /
    m_cached_snapshot_base / m_cached_target_block members on Chainstate.
    
    Drop ActivateSnapshot, PopulateAndValidateSnapshot, MaybeValidateSnapshot,
    DetectSnapshotChainstate, ActivateExistingSnapshot, HistoricalChainstate,
    ValidatedChainstate, RemoveChainstate, LoadAssumeutxoChainstate,
    ValidatedSnapshotCleanup, GetBackgroundVerificationProgress and the
    snapshot-aware paths in CheckBlockIndex / LoadBlockIndex / LoadChainTip /
    UpdateTipLog / MaybeRebalanceCaches.
    
    Delete BLOCK_ASSUMED_VALID, BlockManager::m_snapshot_height, the
    per-snapshot blockfile cursor array, and the NODE_NETWORK-flip on
    snapshot load.
    
    Drop the ChainstateRole parameter from BlockConnected and
    ChainStateFlushed across validationinterface, node/interfaces,
    zmqnotificationinterface, bitcoinkernel. Drop Chain::hasAssumedValidChain.
    
    ChainstateManager still holds std::vector<std::unique_ptr<Chainstate>>
    m_chainstates with exactly one entry; commit 3 collapses that to a
    single unique_ptr.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    
    * nuke: assumeutxo (commit 3 of 3) - collapse m_chainstates to single chainstate
    
    ChainstateManager::m_chainstates was a std::vector<std::unique_ptr<Chainstate>>
    that could hold up to two chainstates (one snapshot-based, one background).
    With the snapshot machinery gone, replace it with a single
    std::unique_ptr<Chainstate> m_chainstate.
    
    Rewrite every `for (auto& cs : m_chainstates)` loop to operate on the sole
    chainstate directly. InitializeChainstate / ActiveChainstate / ActivateBestChains /
    ResetChainstates simplified accordingly, plus the matching call sites in
    init.cpp, node/chainstate.cpp, kernel/bitcoinkernel.cpp,
    test/util/validation.cpp, and the consistency checks in CheckBlockIndex.
    
    Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
    70982a6ffb
  10. nuke: rest tests (unit, functional, build)
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    b9455813f4
  11. nuke: rest (src, build, init)
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    4c1b9d84f1
  12. Merge pull request #9 from rustaceanrob/26-5-13-rm-rest
    Remove the REST interface
    fb00efb24d
  13. contrib: add cherry-pick-upstream Rust tool
    Adds a binary that fetches Bitcoin Core's master branch, finds the
    common ancestor with the current branch, then attempts to cherry-pick
    each merged PR (merge commits) in order. Conflicts are logged and
    skipped; the tool continues to the end and prints a summary.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    2ddf3f9f41
  14. Merge bitcoin/bitcoin#34547: lint: modernise lint tooling
    2424e5283672e10bc45cdbca1a8851308716b50c lint: doc: detail lint tool install methods (will)
    5fefa5a654e2a1146c8abc9673e72d7bcbf2f757 Don't pin Python patch version (Sjors Provoost)
    fd15b55c2ef607525d45f26ab3e7f3fc600e29af lint: use requirements.txt (will)
    5f4d3383daa064d188ef8c6b1d9adbad3a67bcb6 lint: switch to ruff for formatting and linting (will)
    a53b81ce4e649dd637a217686745a6f6c6c81ca5 lint: switch to uv for python management in linter (will)
    
    Pull request description:
    
      Modernise our lint tooling by:
    
      \- Replacing pyenv + pip with [uv](https://docs.astral.sh/uv/) for better Python environment and dependency management
      \- Move uv ruff and ty to install via `COPY --from` multi-stage Docker image imports
      \- Moving ruff lint rules from hardcoded Rust array (in lint_py.rs) into a top-level ruff.toml
      \- Extracting all remaining pip dependencies into dedicated ci/lint/requirements.txt
    
      Extra rationale:
    
      `COPY --from` pulls pre-built binaries from upstream images instead of compiling/downloading at runtime. Containerfile layer optimisations reduce rebuild frequency further.
    
      Pinning tool versions in the dockerfile makes it more excplicit and easier to find.
    
      The tradeoff we make here is that there is no longer a single install script to install tooling on a local machine. However I think this is OK, as it currently only works for `apt`-based OSes anyway, and I don't think running the linter outside of the container is such a valuable use-case as it is with some of the other CI jobs.
    
    ACKs for top commit:
      maflcko:
        review ACK 2424e5283672e10bc45cdbca1a8851308716b50c 🗿
      sedited:
        ACK 2424e5283672e10bc45cdbca1a8851308716b50c
    
    Tree-SHA512: 32ef989c1e241cebe5f13da10abd23f6f63306591fd1f81880d688b886082bca17987591dc592c41fbb72278eba57b3cc6e786de7cfa80eb490ab34465d0119b
    (cherry picked from commit 09a9bb3536718d0dffa6f797ddff907df6ef94f9)
    ca8274c792
  15. Merge bitcoin/bitcoin#35277: ci: Enable ruff ambiguous-unicode-character checks
    fa9c919678c0d4926ff735eecf12562d99a7e691 refactor: Use ignore-list over verbose select-list (MarcoFalke)
    fa9b01adecce7d2e2f0091a363bcf98cf5d5c378 ci: Enable ruff ambiguous-unicode-character checks (MarcoFalke)
    
    Pull request description:
    
      Ambiguous unicode chars are unused and confusing. Worst, they can lead to bugs.
    
      So enable the ruff checks to catch them. Can be tested via:
    
      ```
      echo 'ZGlmZiAtLWdpdCBhL3Rlc3QvZnVuY3Rpb25hbC93YWxsZXRfZGlzYWJsZS5weSBiL3Rlc3QvZnVu
      Y3Rpb25hbC93YWxsZXRfZGlzYWJsZS5weQppbmRleCBkYmNjY2Q0Li4wYjhjNDQ2IDEwMDc1NQot
      LS0gYS90ZXN0L2Z1bmN0aW9uYWwvd2FsbGV0X2Rpc2FibGUucHkKKysrIGIvdGVzdC9mdW5jdGlv
      bmFsL3dhbGxldF9kaXNhYmxlLnB5CkBAIC0yMSwzICsyMSw4IEBAIGNsYXNzIERpc2FibGVXYWxs
      ZXRUZXN0IChCaXRjb2luVGVzdEZyYW1ld29yayk6CiAgICAgZGVmIHJ1bl90ZXN0IChzZWxmKToK
      KyAgICAgICAgIiIiQSBsb3ZlbHkgZG9jc3RyaW5nICh3aXRoIGEgYFUrRkYwOWAgcGFyZW50aGVz
      aXPvvIkuIiIiCiAgICAgICAgICMgTWFrZSBzdXJlIHdhbGxldCBpcyByZWFsbHkgZGlzYWJsZWQK
      KyAgICAgICAgIyBu0L5xYSAgIzwtIGlzIEN5cmlsbGljIChgVSswNDNFYCkKKyAgICAgICAgcHJp
      bnQoIs6XZWxsbywgd29ybGQhIikgICMgPC0gaXMgdGhlIEdyZWVrIGV0YSAoYFUrMDM5N2ApLgor
      ICAgICAgICBleGFtcGxlID0gInjigI8iICogMTAwICAjICAgICLigI94IiBpcyBhc3NpZ25lZAor
      ICAgICAgICBleGFtcGxlPU5vbmUjbm9xYQogICAgICAgICBhc3NlcnRfcmFpc2VzX3JwY19lcnJv
      cigtMzI2MDEsICdNZXRob2Qgbm90IGZvdW5kJywgc2VsZi5ub2Rlc1swXS5nZXR3YWxsZXRpbmZv
      KQo=' | base64 --decode | git apply
    
      git diff
    
      ruff check ./test/functional/*.py
      ```
    
      It should print 4 error types.
    
    ACKs for top commit:
      stickies-v:
        ACK fa9c919678c0d4926ff735eecf12562d99a7e691
      willcl-ark:
        ACK fa9c919678c0d4926ff735eecf12562d99a7e691
    
    Tree-SHA512: de226ec2feaf65a0a8b15606708cc390296be4492f41221f8a49f034b16e8fb62125342c6993f9d5c76bd4ae2db7343851b252a1b9140e27d6777f19a0b1605e
    (cherry picked from commit 82733e61deea24cfd344aed36020675a15cc672e)
    2459d614a6
  16. Merge pull request #11 from rustaceanrob/daily-cherry-pick
    Daily cherry pick
    b42dd03018
  17. contrib: cherry-pick-upstream: skip already-applied commits
    Track which upstream merge commits were previously cherry-picked by
    scanning our branch's commit messages for the "(cherry picked from
    commit <hash>)" trailers written by -x. Switch the upstream log format
    from --oneline to --format=%H %s so full hashes are used throughout,
    ensuring reliable comparison against the stored trailers.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    1a42e017d6
  18. Merge pull request #12 from rustaceanrob/tst-chr
    contrib: cherry-pick-upstream: skip already-applied commits
    7e94440981
  19. test: remove functional test suite
    Removes test/functional entirely, along with all CI invocations,
    documentation, build-system hooks, and contrib scripts that depended on
    it (contrib/testgen, contrib/message-capture).
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    d52904cb18
  20. node: remove unused bitcoin-build-config.h include from interfaces.cpp
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    4fdbfc0db9
  21. lint: remove resolved circular dependency expectation
    The cycle node/utxo_snapshot -> validation -> node/utxo_snapshot no
    longer exists and can be removed from EXPECTED_CIRCULAR_DEPENDENCIES.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    fa4d212a34
  22. Merge pull request #13 from rustaceanrob/rm-functional-test
    Remove functional tests
    7936c7db9a
  23. ci: iwyu, doc links, `fuzz/CMakeLists.txt` 4343b2b4c0
  24. Merge pull request #14 from rustaceanrob/26-5-13-fix-most-ci
    Remove unused fuzz targets
    c425552d52
  25. Decrease the HTTP server threads to one 73f152f99c
  26. Merge pull request #15 from rustaceanrob/26-5-13-http-pool
    Decrease the HTTP server threads to one
    c7586948b5
  27. Merge bitcoin/bitcoin#35283: doc: mention -DWITH_ZMQ=ON in BSD build guides
    ca93ab808c488324990eb91ed8297a37dd10d580 doc: mention -DWITH_ZMQ=ON in BSD build guides (junbyjun1238)
    
    Pull request description:
    
      The BSD build guides currently state:
    
      > If the package is installed, support will be compiled in.
    
      Since `WITH_ZMQ` defaults to `OFF`, this is inaccurate: installing the dependency alone does not enable ZMQ support. Update the wording to mention the required `-DWITH_ZMQ=ON` CMake option, matching `doc/zmq.md`.
    
      Docs-only change; no tests run.
    
    ACKs for top commit:
      maflcko:
        lgtm ACK ca93ab808c488324990eb91ed8297a37dd10d580
      sedited:
        ACK ca93ab808c488324990eb91ed8297a37dd10d580
    
    Tree-SHA512: d07b1b9748d8b6aa555c992608f8659b7e93d6587bbbb2170352342003e90a81592ddfa2abf3a26b8ebf1341142d8628cfc3faba0c4759655a91446afa5fc22a
    (cherry picked from commit 5309c90542276f5357a75f0335cad949ae515d42)
    441c300da3
  28. Merge bitcoin/bitcoin#35274: doc: clarify libfuzzer-nosan preset uses build_fuzz_nosan dir
    0065f354a7e9435fbc64f2bdc7b2b695df90cf4c doc: clarify libfuzzer-nosan preset uses build_fuzz_nosan dir (ImMike)
    
    Pull request description:
    
      Adds a clarifying note next to the first mention of the `libfuzzer-nosan` preset in the Quickstart, pointing out that it uses a different build directory (`build_fuzz_nosan`, per [`CMakePresets.json` L54](https://github.com/bitcoin/bitcoin/blob/master/CMakePresets.json#L54)).
    
      A reader following the quickstart with `--preset=libfuzzer-nosan` and then running `cmake --build build_fuzz` as shown would otherwise operate against the wrong (or empty) directory.
    
      Pure docs; no code changes.
    
    ACKs for top commit:
      l0rinc:
        ACK 0065f354a7e9435fbc64f2bdc7b2b695df90cf4c
      maflcko:
        lgtm ACK 0065f354a7e9435fbc64f2bdc7b2b695df90cf4c
      sedited:
        ACK 0065f354a7e9435fbc64f2bdc7b2b695df90cf4c
    
    Tree-SHA512: d73901112d259cec58746dff50fe3f9409e5b9826f0759f45478fe039bca851eb163036c60bdb215bfc66be79428b790742bbe8bc32b1ceaa2d6f80c17faf6d0
    (cherry picked from commit 04003e1fa3754b7557255d82c9b6d7ce309b11c8)
    4d6d698fcf
  29. Merge bitcoin/bitcoin#35156: dbwrapper: reuse scratch `DataStream` buffers
    032223f403d320c3c47c7d5932e333f306efcdc3 dbwrapper: reuse iterator scratch stream (Lőrinc)
    7403c0f907df694af8c9ee7d43dc65041242ca21 dbwrapper: guard `CDBBatch` scratch streams (Lőrinc)
    cb1ab0a716802dae31c395691c4b2f3e4e5d4cb7 test: cover repeated dbwrapper stream use (Lőrinc)
    31ce729b28ec7b1013054518559c55c642ac778e streams: add `ScopedDataStreamUsage` (Lőrinc)
    
    Pull request description:
    
      ### Problem
      `CDBIterator::GetValue()` cannot use `SpanReader` the same way as `::GetKey()` because values are deobfuscated in place before deserialization, so it still needs an owning mutable buffer.
      However, the current path allocates a fresh `DataStream` for every value read.
    
      The same local-stream pattern also exists in `CDBIterator::Seek()`, while `CDBBatch` already owns reusable key/value buffers but still manually reserves and clears them on every `Write()` and `Erase()` call.
    
      ### Fix
      Add `ScopedDataStreamUsage`, a small RAII helper for caller-owned scratch streams.
      It asserts that the stream is empty on entry (making accidental re-entry or concurrent use of the same scratch stream fail fast), and clears it on scope exit.
    
      Use it to guard the reusable scratch streams in `CDBBatch::Write()`, `::Erase()` and `CDBIterator::Seek()`, `::GetValue()`.
      The const read-side `CDBWrapper` helpers stay unchanged, since they can be called concurrently on the same wrapper and should keep using local streams.
    
      The production changes are preceded by tests covering repeated reuse on the same owning objects, including a failed iterator value decode followed by a successful read from the same iterator entry.
    
      ### Context
      Follow-up to #35128, #34483 and #35025.
    
      ### Reproducer
      `gettxoutsetinfo` gets an additional ~6% speedup on top of the previous iterator-key optimization:
    
      <details><summary>2026-04-24 | gettxoutsetinfo | i9-ssd | x86_64 | Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz | 16 cores | 62Gi RAM | xfs | SSD</summary>
    
      ```bash
      COMMITS="2d5ab09f0dca4bfec0b365f5f431def2c0c9d70f 9e5fd595ae8ebeec74678c31a547fbc14f87bf89"; \
      BASE_DIR="/mnt/my_storage"; DATA_DIR="$BASE_DIR/BitcoinData"; LOG_DIR="$BASE_DIR/logs"; \
      mkdir -p "$LOG_DIR" && \
      (echo ""; for c in $COMMITS; do git cat-file -e "$c^{commit}" 2>/dev/null || git fetch -q origin "$c" || exit 1; git log -1 --pretty='%h %s' "$c" || exit 1; done) && \
      (echo "" && echo "$(date -I) | gettxoutsetinfo | $(hostname) | $(uname -m) | $(lscpu | grep 'Model name' | head -1 | cut -d: -f2 | xargs) | $(nproc) cores | $(free -h | awk '/^Mem:/{print $2}') RAM | $(df -T $BASE_DIR | awk 'NR==2{print $2}') | $(lsblk -no ROTA $(df --output=source $BASE_DIR | tail -1) | grep -q 1 && echo HDD || echo SSD)"; echo "") && \
      hyperfine \
        --sort command \
        --runs 3 \
        --export-json "$BASE_DIR/gettxoutsetinfo-$(sed -E 's/([a-f0-9]{8})[a-f0-9]* ?/\1-/g;s/-$//'<<<"$COMMITS")-$(date +%s).json" \
        --parameter-list COMMIT ${COMMITS// /,} \
        --prepare "killall -9 bitcoind 2>/dev/null || true; rm -f $DATA_DIR/debug.log; git clean -fxd && git reset --hard {COMMIT} && \
          cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release && ninja -C build bitcoind bitcoin-cli -j$(nproc) && \
          ./build/bin/bitcoind -datadir=$DATA_DIR -connect=0 -listen=0 -dnsseed=0 -coinstatsindex=0 -txindex=0 -blockfilterindex=0 -daemon -printtoconsole=0; \
          ./build/bin/bitcoin-cli -datadir=$DATA_DIR -rpcwait getblockcount >/dev/null" \
        --conclude "./build/bin/bitcoin-cli -datadir=$DATA_DIR stop 2>/dev/null || true; killall bitcoind 2>/dev/null || true; sleep 10; \
          grep -q 'Done loading' $DATA_DIR/debug.log && grep 'Bitcoin Core version' $DATA_DIR/debug.log | grep -q \"\$(git rev-parse --short=12 {COMMIT})\"; \
          cp $DATA_DIR/debug.log $LOG_DIR/gettxoutsetinfo-{COMMIT}-$(date +%s).log" \
        "./build/bin/bitcoin-cli -datadir=$DATA_DIR -rpcclienttimeout=0 -named gettxoutsetinfo hash_type='none' use_index='false' >/dev/null"
    
      2d5ab09f0d Merge bitcoin/bitcoin#35124: bench: fix benchmark fixtures and setup checks
      cb63e158d9 walletdb: reuse batch scratch streams
    
      2026-04-24 | gettxoutsetinfo | i9-ssd | x86_64 | Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz | 16 cores | 62Gi RAM | xfs | SSD
    
      Benchmark 1: ./build/bin/bitcoin-cli -datadir=/mnt/my_storage/BitcoinData -rpcclienttimeout=0 -named gettxoutsetinfo hash_type='none' use_index='false' >/dev/null (COMMIT = 2d5ab09f0dca4bfec0b365f5f431def2c0c9d70f)
        Time (mean ± σ):     60.063 s ±  1.623 s    [User: 0.001 s, System: 0.002 s]
        Range (min … max):   59.020 s … 61.933 s    3 runs
    
      Benchmark 2: ./build/bin/bitcoin-cli -datadir=/mnt/my_storage/BitcoinData -rpcclienttimeout=0 -named gettxoutsetinfo hash_type='none' use_index='false' >/dev/null (COMMIT = cb63e158d9ae8276dbe54bba0b0cf8f35378ec71)
        Time (mean ± σ):     56.853 s ±  0.179 s    [User: 0.002 s, System: 0.001 s]
        Range (min … max):   56.675 s … 57.033 s    3 runs
    
      Relative speed comparison
              1.06 ±  0.03  ./build/bin/bitcoin-cli -datadir=/mnt/my_storage/BitcoinData -rpcclienttimeout=0 -named gettxoutsetinfo hash_type='none' use_index='false' >/dev/null (COMMIT = 2d5ab09f0dca4bfec0b365f5f431def2c0c9d70f)
              1.00          ./build/bin/bitcoin-cli -datadir=/mnt/my_storage/BitcoinData -rpcclienttimeout=0 -named gettxoutsetinfo hash_type='none' use_index='false' >/dev/null (COMMIT = cb63e158d9ae8276dbe54bba0b0cf8f35378ec71)
      ```
    
      </details>
    
    ACKs for top commit:
      andrewtoth:
        re-ACK 032223f403d320c3c47c7d5932e333f306efcdc3
      CruzMolina:
        tACK 032223f403d320c3c47c7d5932e333f306efcdc3
      achow101:
        ACK 032223f403d320c3c47c7d5932e333f306efcdc3
      optout21:
        ACK 032223f403d320c3c47c7d5932e333f306efcdc3
      sedited:
        ACK 032223f403d320c3c47c7d5932e333f306efcdc3
    
    Tree-SHA512: 6ed51d1a492ca216108b10c01668b01f986260641714951da1d282f1dacf87f0df2b312108f24c06151d3b81eaa4ca6eb4e9ab4e2d829346b0e8f07d0c569a1e
    (cherry picked from commit a145fa881a2705a7bed4fe9c6dad589eb1a238d1)
    1696b9c613
  30. Merge bitcoin/bitcoin#35284: fuzz: use ImmediateBackgroundTaskRunner to silence DEBUG_LOCKORDER
    801d36f55b6d421f26d2376327699a04bd22e602 fuzz: use ImmediateBackgroundTaskRunner to silence DEBUG_LOCKORDER (Eugene Siegel)
    
    Pull request description:
    
      DEBUG_LOCKORDER was reporting a false positive deadlock with the cmpctblock fuzz harness when using ImmediateTaskRunner. Since it is single-threaded, ImmediateTaskRunner callbacks added LockOrders that could never happen outside of a fuzz test.
    
      First a block would get connected:
      * LOCK(mempool.cs)
      * BlockConnected (fuzz test runs in same thread)
      * LOCK(m_tx_download_mutex)
    
      Then a later iteration of the LIMITED_WHILE would send a TX:
      * LOCK(m_tx_download_mutex)
      * LOCK(mempool.cs)
    
      causing a false positive deadlock. Normally, the BlockConnected callback would run in a different thread and no deadlock is reported.
    
      Fix this by launching a thread that runs the callback and is immediately joined. I compared this PR to another branch (https://github.com/Crypt-iQ/bitcoin/commit/0028847c6b8b937031228e9a1fce83982976d86e) that uses a ThreadPool and found this PR to be more stable and ~4% quicker.
    
    ACKs for top commit:
      maflcko:
        lgtm ACK 801d36f55b6d421f26d2376327699a04bd22e602
      sedited:
        ACK 801d36f55b6d421f26d2376327699a04bd22e602
    
    Tree-SHA512: 5e1f27354c484a90ffd74a1a11e5fed68d7b38d95c06dd39529217f07d535eb9a5b7befb42b2829d79c52b5eb43542bd1079c81d6eb0e56476352ffe98e0177e
    (cherry picked from commit 3cab711d69572431af78b0071fb721496f0241d7)
    a4ca01c5dc
  31. Merge pull request #16 from rustaceanrob/25-5-14-cp
    Daily cherry-pick
    97e1b845a6
  32. ipc: add stop method to Init interface
    Expose a stop() call over the IPC socket so remote clients can
    signal the node to begin its shutdown sequence. The bitcoin-node
    implementation delegates to startShutdown(); bitcoind leaves the
    default no-op since it does not listen for IPC connections.
    
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    ce9e4b9b90
  33. nuke: `bitcoin-cli` use of RPC interface 34a8428be3
  34. Merge pull request #17 from rustaceanrob/26-5-14-ipc-shutdown
    Replace the RPC with IPC
    c994dbd9e7
  35. Merge bitcoin/bitcoin#35289: fuzz: Fix timeout in `txorphan`
    004a7e3cfbc5b2118536651d2201cf8b72c87736 fuzz: Fix txorphan timeout by limiting block weight (marcofleon)
    
    Pull request description:
    
      The `EraseForBlock` branch in the `txorphan` harness could produce a block with 1000 transactions in it, each with potentially up to 200,000 inputs, resulting in way too many [map lookups](https://github.com/bitcoin/bitcoin/blob/3cab711d69572431af78b0071fb721496f0241d7/src/node/txorphanage.cpp#L625). This was producing inputs that were taking 2 seconds or longer per iteration, which is too long.
    
      Fix by only adding transactions to the block up to the block weight limit. This matches production behavior, as `EraseForBlock` is only called on a newly [connected block](https://github.com/bitcoin/bitcoin/blob/3cab711d69572431af78b0071fb721496f0241d7/src/net_processing.cpp#L2090).
    
    ACKs for top commit:
      maflcko:
        lgtm ACK 004a7e3cfbc5b2118536651d2201cf8b72c87736
      instagibbs:
        ACK 004a7e3cfbc5b2118536651d2201cf8b72c87736
      sedited:
        ACK 004a7e3cfbc5b2118536651d2201cf8b72c87736
    
    Tree-SHA512: 465504402358e1bed629104b21e05301139f1590884de21e77d566a45e422eef6d4380c5714692f33f5398e4e299b8c9f84b82f58c56a98e410c5c841184aee5
    (cherry picked from commit ddb94fd3e1061c465e425629d6c7d4b292301da5)
    778d1c2e5f
  36. Merge bitcoin/bitcoin#34225: refactor, key: move `CreateMuSig2{Nonce,PartialSig}` functions to `musig.{h,cpp}` module
    8ba5f68b1df99350aa037a644041034cf46842dc refactor, key: move `CreateMuSig2PartialSig` to `musig.{h,cpp}` module (Sebastian Falbesoner)
    d087f266fc24145e3a34a9f2e8f08c583f806aad refactor, key: move `CreateMuSig2Nonce` to `musig.{h,cpp}` module (Sebastian Falbesoner)
    f36d89f4363a25f7948a0f7096201ef8e15045d8 key: add `GetSecp256k1SignContext` access function (w0xlt)
    
    Pull request description:
    
      This PR is a follow-up of #29675, see https://github.com/bitcoin/bitcoin/pull/29675#discussion_r2265077463. It moves all MuSig2 functions that currently live in `CKey` and call secp256k1 musig module API functions (i.e. `secp256k1_musig_...`) to the `musig.{h,cpp}` module, as this seems to be a better place. For accessing the `secp256k1_context_signing` object from the outside, a new function `GetSecp256k1SignContext` is added in the third commit.
    
      As the patch is mostly move-only, it can be best reviewed via the git option `--color-moved=dimmed-zebra`
    
    ACKs for top commit:
      achow101:
        ACK 8ba5f68b1df99350aa037a644041034cf46842dc
      w0xlt:
        reACK 8ba5f68b1df99350aa037a644041034cf46842dc
      rkrux:
        lgtm ACK 8ba5f68b1df99350aa037a644041034cf46842dc
      furszy:
        ACK 8ba5f68b1df99350aa037a644041034cf46842dc
    
    Tree-SHA512: 95fcaa5d7a09037a0dce0053b8c640a7372a1251a2a3615c565f4dacc5aad5cf0ee8bfc43aa0d0def628465c16330d69f6ea9fcc07bbadc971863248f60d1878
    (cherry picked from commit 379b9fbf036e2f214c4fce2a1ba086def4abac65)
    b3464646f8
  37. Merge pull request #18 from rustaceanrob/26-5-16-cp
    Daily cherry pick
    a73da0b01b
  38. build, ci: Remove IPC configuration and install `capnp` on runners 0c74bce09e
  39. Merge pull request #19 from rustaceanrob/26-5-16-ci
    build, ci: Remove IPC configuration and install `capnp` on runners
    7d956676e6
  40. Remove the `bitcoin-util` executable
    This is only used for grinding hashes and is no longer linked anywhere
    d23bf6bb5c
  41. Merge pull request #20 from rustaceanrob/26-5-16-remove-grind
    Remove the `bitcoin-util` executable
    150cc7d98e
  42. Remove `bitcoin-tx` executable
    This is a CLI for manually manipulating transactions. Nice to have but
    seems outside of the scope for maintenance here.
    d2dfac4646
  43. Merge pull request #21 from rustaceanrob/26-5-16-remove-tx
    Remove `bitcoin-tx` executable
    7c2285d86a
  44. Remove Windows CI jobs and helper scripts
    Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
    99e8ae76d0
  45. Merge pull request #22 from rustaceanrob/26-5-17-win-ci
    Remove Windows CI jobs and helper scripts
    6ca8177e20
  46. Merge bitcoin/bitcoin#34860: mining: always pad scriptSig at low heights, drop include_dummy_extranonce
    8544537f41df568e6e1cb94eeab9e699b9190427 mining: drop unused include_dummy_extranonce option (Sjors Provoost)
    58eeab790d9825a777f907e3e912a2da78cbc76d mining: only pad with OP_0 at heights <= 16 (Sjors Provoost)
    00d22328b0560bf9773417495123ae68bb89e4d1 mining: pad coinbase to fix createNewBlock at heights <=16 (Sjors Provoost)
    605ff37403f0b50c5664bb4e2d6eaf84022d53e4 test: bad-cb-length for createNewBlock() at low heights (Sjors Provoost)
    1966621b76885257b4b4e44aab4712e9f84313e6 test: refactor IPC mining test to use script_BIP34_coinbase_height (Sjors Provoost)
    
    Pull request description:
    
      Blocks 0-16 on any new chain require mining code to be careful not to violate the `bad-cb-length` rule, which states the coinbase transaction scriptSig must be at least 2 bytes.
    
      Our mining code deals with that by padding the `scriptSig` with a 0 `extraNonce`. It does this for every height. As a result IPC clients would get an unnecessary `0` in the `scriptSigPrefix` field of  `CoinbaseTx`. #32420 fixed that by introducing a `include_dummy_extranonce` option in `BlockCreateOptions` and turning that off for IPC clients.
    
      A minor issue was missed though: `createNewBlock()` now fails with `bad-cb-length`. An easy workaround is to use the `generate` RPC for the first 16 blocks, as demonstrated in the 2nd commit.
    
      The real fix is to have the miner code always pad the `scriptSig` at lower heights, but to _not_ include that in the `scriptSigPrefix` field of  `CoinbaseTx` (introduced in #33819). This is what the 3rd commit implements.
    
      Now that we set `scriptSigPrefix` independent of what our internal miner code does - to get past `CheckBlock()` - the original motivation for `include_dummy_extranonce` goes away and we can just drop it entirely. The last commit drops it, while the 4th commit adjusts the tests and hardcoded block and assume utxo hashes.
    
      This last change does not break IPC clients, because `include_dummy_extranonce` was never exposed in `mining.capnp`.
    
      Instead of adjusting the hardcoded hashes, an alternative approach would be to just always pad the `scriptSig` internally, since we exclude the padding from `scriptSigPrefix` anyway. However, IPC clients can also call `getBlock()` to get the raw block and might be confused about the difference. The miner code is also easier to understand if we limit the exception (`coinbase_tx.script_sig_prefix != coinbaseTx.vin[0].scriptSig`) to `nHeight <= 16`, where the explanation is based purely on consensus rules rather than historical test suite reasons.
    
      The first two commits are preperation test changes:
      -  extract `assert_capnp_failed` helper for macOS (also part of #34727)
      -  use `script_BIP34_coinbase_height` in IPC mining test (existing code in `interface_ipc_mining.py` was incorrect for low height
    
      Fixes #35126
    
    ACKs for top commit:
      ryanofsky:
        Code review ACK 8544537f41df568e6e1cb94eeab9e699b9190427. Just rebased to fix silent conflict and applied some minor suggestions since last review. As part of rereviewing I left some more minor suggestions that are fine to ignore.
      sedited:
        Re-ACK 8544537f41df568e6e1cb94eeab9e699b9190427
    
    Tree-SHA512: a01d48842bf4bcc1a9c51a89ef9d750766db7d04edb4dcd6b3a8bf195c6b4fa07445256a49367ff0db00ab489a52a3d7ff6a5c3ab9290ecb1fcb82f532552e9b
    (cherry picked from commit 7802e578c3f1e9a5d9b57fb003349d0e032bb43b)
    788f390fb0
  47. Merge pull request #23 from rustaceanrob/26-5-17-cp
    Daily cherry pick
    26be324dcb
  48. Merge bitcoin/bitcoin#35117: i2p: clean up SESSION CREATE error logging
    b6c367044288f83ab61c1a77ad34c33adf39ecf6 i2p: clean up SAM error logging (takeshikurosawaa)
    
    Pull request description:
    
      Clean up the I2P SAM error path.
    
      `SESSION CREATE` may contain the private key, so the generic SAM reply
      error path now reports the redacted request text instead of the full
      request. It also avoids echoing raw router replies in those generic
      error messages.
    
      No network behavior change intended.
    
    ACKs for top commit:
      davidgumberg:
        crACK https://github.com/bitcoin/bitcoin/pull/35117/commits/b6c367044288f83ab61c1a77ad34c33adf39ecf6
      vasild:
        ACK b6c367044288f83ab61c1a77ad34c33adf39ecf6
    
    Tree-SHA512: 204c8b64c6d3dd2f94f92cdc6d3daefd7773c42066984b9da859ebc2912c2ed38079d9e82a2d1f09d8d720750047114a80189e688929d7a0af5da2c2ee4a88da
    (cherry picked from commit b2a3ca3df901dcc19b07f7dcf3115d8f7835b931)
    2ca856f7fb
  49. Merge bitcoin/bitcoin#34934: fuzz: exercise ForNode/ForEachNode callbacks in connman fuzz harness
    371eac8069a47f27c3c388c7cb2251f0a2a1d8e8 fuzz: exercise ForNode/ForEachNode callbacks in connman fuzz harness (frankomosh)
    
    Pull request description:
    
      Track inserted node IDs and sometimes reuse them in `ForNode()` so the successful lookup path is exercised more reliably. Replace no-op callbacks with lightweight CNode accessor calls to make `ForEachNode()` and `ForNode()` cover previously unreached callback code paths.
    
      This addresses feedback from https://github.com/bitcoin/bitcoin/pull/34830#issuecomment-4074732710  where it was noted that the callbacks had "neither the return type checked nor its side-effect”.
    
      Coverage reports from the connman fuzz corpus, before and after the change:
    
      - [Before](https://frankomosh.github.io/fuzz-coverage/connman-callback-coverage/before/index.html)
      - [After](https://frankomosh.github.io/fuzz-coverage/connman-callback-coverage/after/index.html)
    
      `diff cov_show_before.txt cov_show_after.txt` filtered to `ForNode`/`ForEachNode`/`IsFullOutboundConn`/`ConnectionTypeAsString`:
    
      **`IsFullOutboundConn` — `net.h:786-788`**
      ```diff
      -  786|      0|    bool IsFullOutboundConn() const {
      -  787|      0|        return m_conn_type == ConnectionType::OUTBOUND_FULL_RELAY;
      -  788|      0|    }
      +  786|  1.13M|    bool IsFullOutboundConn() const {
      +  787|  1.13M|        return m_conn_type == ConnectionType::OUTBOUND_FULL_RELAY;
      +  788|  1.13M|    }
      ```
    
      **`ConnectionTypeAsString` — `net.h:967`**
      ```diff
      -  967|      0|    std::string ConnectionTypeAsString() const { return ::ConnectionTypeAsString(m_conn_type); }
      +  967|  1.11M|    std::string ConnectionTypeAsString() const { return ::ConnectionTypeAsString(m_conn_type); }
      ```
    
      **`ForNode` — `net.cpp:4126-4131`**
      ```diff
      -  4126|  1.08k|        if(pnode->GetId() == id) {
      -    |  Branch (4126:12): [True: 0, False: 1.08k]
      -  4127|      0|            found = pnode;
      -  4131|     39|    return found != nullptr && NodeFullyConnected(found) && func(found);
      -                                              ^0                          ^0
      +  4126|    602|        if(pnode->GetId() == id) {
      +    |  Branch (4126:12): [True: 1, False: 601]
      +  4127|      1|            found = pnode;
      +  4131|     28|    return found != nullptr && NodeFullyConnected(found) && func(found);
      +                                              ^1                          ^1
      ```
    
      **`ForEachNode` — `net.h:1270-1271`**
      ```diff
      -  1270|  1.13M|            if (NodeFullyConnected(node))
      -    |  Branch (1270:17): [True: 0, False: 1.13M]
      -  1271|      0|                func(node);
      +  1270|  1.11M|            if (NodeFullyConnected(node))
      +    |  Branch (1270:17): [True: 1.11M, False: 0]
      +  1271|  1.11M|                func(node);
      ```
    
      Two previously uncovered functions (`IsFullOutboundConn`, `ConnectionTypeAsString`) are now exercised through the iteration callbacks. `ForNode` finds matching nodes.
    
    ACKs for top commit:
      nervana21:
        tACK 371eac8069a47f27c3c388c7cb2251f0a2a1d8e8
      maflcko:
        lgtm ACK 371eac8069a47f27c3c388c7cb2251f0a2a1d8e8
    
    Tree-SHA512: 3587c021b16e38ca252676a21b66c5383ab2bd3eec9073e61e9a93db7ef84a94ce5a0c037ac512483680cafabb44103b86df0893e8a9b1bf63b8383bd54f4641
    (cherry picked from commit 278b9e39df2d7298fadf88f76607463005b6eb3c)
    7210b7fe7b
  50. rustaceanrob closed this on May 19, 2026

  51. DrahtBot commented at 8:40 PM on May 19, 2026: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

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

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

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

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

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

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  52. l0rinc commented at 7:12 AM on May 20, 2026: contributor

    I wonder what @josibake will delete tomorrow

  53. willcl-ark commented at 7:40 AM on May 20, 2026: member

    it is very annoying github doesn’t let a fork of a fork set the default base branch for PRs though :( (benchcoin has the same problem).

    AFAIK it can only be done by nuking the repo (on GH) and making a new disconnected one.

  54. l0rinc commented at 10:13 AM on May 20, 2026: contributor

    AFAIK it can only be done by nuking the repo (on GH) and making a new disconnected one

    I haven't found a way to change the webui either, but it can also be done via the gh command line. You can also augment the GitHub page via TamperMonkey user scripts and fix each of these stupid UI bugs one by one, see https://github.com/l0rinc/ACKtopus/commit/24f2287fc3a5dc9729b87e676ce67ed3418701a1#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5R281-R283

    <img width="627" height="173" alt="image" src="https://github.com/user-attachments/assets/1bb243e6-bb4d-4003-885a-e2ceda3c9eca" />


github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-05-22 21:51 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me