No description provided.
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-
rustaceanrob commented at 8:38 PM on May 19, 2026: contributor
-
b6ee635472
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>
-
93b08fbbc0
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>
-
ed019a8f53
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.
-
77a107b810
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.
-
f4e5202db6
Merge pull request #4 from rustaceanrob/26-5-12-rm-gui
Remove the GUI
-
e35ca827de
nuke: wallet + psbt + external-signer (src, build, deps, ci, tests, docs) (#5)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
-
1d2d308388
nuke: indexes + compact-filters (src, build, ci, tests, docs) (#7)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
-
70982a6ffb
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>
-
b9455813f4
nuke: rest tests (unit, functional, build)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
4c1b9d84f1
nuke: rest (src, build, init)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
fb00efb24d
Merge pull request #9 from rustaceanrob/26-5-13-rm-rest
Remove the REST interface
-
2ddf3f9f41
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>
-
ca8274c792
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) -
2459d614a6
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) -
b42dd03018
Merge pull request #11 from rustaceanrob/daily-cherry-pick
Daily cherry pick
-
1a42e017d6
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>
-
7e94440981
Merge pull request #12 from rustaceanrob/tst-chr
contrib: cherry-pick-upstream: skip already-applied commits
-
d52904cb18
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>
-
4fdbfc0db9
node: remove unused bitcoin-build-config.h include from interfaces.cpp
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
fa4d212a34
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>
-
7936c7db9a
Merge pull request #13 from rustaceanrob/rm-functional-test
Remove functional tests
-
ci: iwyu, doc links, `fuzz/CMakeLists.txt` 4343b2b4c0
-
c425552d52
Merge pull request #14 from rustaceanrob/26-5-13-fix-most-ci
Remove unused fuzz targets
-
Decrease the HTTP server threads to one 73f152f99c
-
c7586948b5
Merge pull request #15 from rustaceanrob/26-5-13-http-pool
Decrease the HTTP server threads to one
-
441c300da3
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) -
4d6d698fcf
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) -
1696b9c613
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) -
a4ca01c5dc
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) -
97e1b845a6
Merge pull request #16 from rustaceanrob/25-5-14-cp
Daily cherry-pick
-
ce9e4b9b90
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>
-
nuke: `bitcoin-cli` use of RPC interface 34a8428be3
-
c994dbd9e7
Merge pull request #17 from rustaceanrob/26-5-14-ipc-shutdown
Replace the RPC with IPC
-
778d1c2e5f
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) -
b3464646f8
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) -
a73da0b01b
Merge pull request #18 from rustaceanrob/26-5-16-cp
Daily cherry pick
-
build, ci: Remove IPC configuration and install `capnp` on runners 0c74bce09e
-
7d956676e6
Merge pull request #19 from rustaceanrob/26-5-16-ci
build, ci: Remove IPC configuration and install `capnp` on runners
-
d23bf6bb5c
Remove the `bitcoin-util` executable
This is only used for grinding hashes and is no longer linked anywhere
-
150cc7d98e
Merge pull request #20 from rustaceanrob/26-5-16-remove-grind
Remove the `bitcoin-util` executable
-
d2dfac4646
Remove `bitcoin-tx` executable
This is a CLI for manually manipulating transactions. Nice to have but seems outside of the scope for maintenance here.
-
7c2285d86a
Merge pull request #21 from rustaceanrob/26-5-16-remove-tx
Remove `bitcoin-tx` executable
-
99e8ae76d0
Remove Windows CI jobs and helper scripts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
-
6ca8177e20
Merge pull request #22 from rustaceanrob/26-5-17-win-ci
Remove Windows CI jobs and helper scripts
-
788f390fb0
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) -
26be324dcb
Merge pull request #23 from rustaceanrob/26-5-17-cp
Daily cherry pick
-
2ca856f7fb
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) -
7210b7fe7b
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) - rustaceanrob closed this on May 19, 2026
-
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-->
-
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.
-
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" />