49142 Commits

Author SHA1 Message Date
Sjors Provoost
8daac1d6eb mining: add block create option helpers
Move block template defaulting into helper functions for
BlockCreateOptions. FlattenMiningOptions() fills hardcoded defaults and
MergeMiningOptions() overlays defaults without replacing caller-provided
values.

Use the shared option type in BlockAssembler so IPC callers and internal
callers can pass through the same options path. This commit does not
change behavior, except for dropping the "Specified " prefix from startup
option error messages.

Keep the -blockmintxfee ParseMoney check in ReadMiningArgs() instead of
CheckMiningOptions(), because CheckMiningOptions() only sees the parsed
CFeeRate value and not the original string.

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
2026-05-22 08:31:01 +02:00
Sjors Provoost
128da7c3ff miner: add block_max_weight to BlockCreateOptions
This new optional replaces nBlockMaxWeight.

Use uint64_t for the block weight options to match BlockAssembler's
nBlockWeight accounting and the IPC schema's blockReservedWeight type.

A negative -blockmaxweight value is now parsed as 0 instead of an
overflowed signed value before validation rejects it.

The new block_max_weight option is not exposed to IPC clients.
2026-05-22 08:31:00 +02:00
Sjors Provoost
fa81e51eae mining: parse block creation args in mining_args
Move the argument parsing for -blockmaxweight, -blockreservedweight,
-blockmintxfee out of init.cpp to a dedicated mining_args.cpp.

This is mostly a refactor and keeps the existing validation checks. It
does switch the weight arguments to GetArg<uint64_t>, introduced in
bitcoin/bitcoin#34582, so very large or negative weight values can be
reported differently in error messages.
2026-05-22 08:31:00 +02:00
Sjors Provoost
020166080c mining: use interface for tests, bench and fuzzers
Have most tests, benchmarks and fuzzers go through the mining interface.
This is a refactor: it does not change what blocks are created, just how
the creation calls are made. This avoids most direct test, benchmark and
fuzzer use of node::BlockAssembler::Options, making it easier to drop in a
later commit.

Two exceptions which use BlockAssembler directly:
- one check in test/miner_tests.cpp needs m_package_feerates
- fuzz/tx_pool.cpp Finish() doesn't have access to a NodeContext

Move test_block_validity from BlockAssembler::Options to
BlockCreateOptions so bench/block_assemble.cpp can continue to set it.
Just like coinbase_output_script, this is not exposed to IPC clients.

Inline options variable in places where it's only needed once.

We also drop one unused PrepareBlock declaration and one unused
implementation.

TestChain100Setup::CreateBlock no longer needs a chainstate argument,
which in turn means it can be dropped from CreateAndProcessBlock. Using
the Mining interface here also requires marking the test
KernelNotifications chainstate as loaded after LoadVerifyActivateChainstate().
2026-05-22 08:31:00 +02:00
Sjors Provoost
44082bea47 interfaces: make Mining use const NodeContext
The next commit switches test helpers that take a const NodeContext& to
create blocks through the Mining interface, so MakeMining needs to
accept a const NodeContext too.
2026-05-22 08:31:00 +02:00
Sjors Provoost
d4368e059c move-only: add node/mining_types.h
Move mining related structs there.

This simplifies includes in later commits and makes the code easier to
understand for Mining IPC client developers.
2026-05-22 08:31:00 +02:00
Sjors Provoost
6aeb1fbea2 test: cover IPC blockmaxweight policy
Verify that -blockmaxweight is honored both when an IPC block template is first created and after waitNext() refreshes the template.

Co-authored-by: w0xlt <94266259+w0xlt@users.noreply.github.com>
2026-05-22 08:31:00 +02:00
Sjors Provoost
63b23ea1e9 test: regression test for waitNext mining policy
Demonstrates that BlockTemplateImpl::waitNext() must respect the
mining policy supplied via -blockmintxfee, not silently fall back
to defaults.

Co-authored-by: Enoch Azariah <enirox001@gmail.com>
2026-05-22 08:31:00 +02:00
Sjors Provoost
24750f8b31 test: add createNewBlock failure helper
Move the IPC createNewBlock failure assertion into ipc_util.py so
later invalid mining option tests can share the same remote exception check.
2026-05-22 08:31:00 +02:00
Sjors Provoost
63ee9cd15b test: misc interface_ipc_mining.py improvements
- clarify run_ipc_option_override_test description: https://github.com/bitcoin/bitcoin/pull/33965#discussion_r2784515535
- trailing comma after includes: https://github.com/bitcoin/bitcoin/pull/34452#discussion_r2775183035
- include order: https://github.com/bitcoin/bitcoin/pull/34452#discussion_r2774730966
- reuse the shared miniwallet in the low block height test: https://github.com/bitcoin/bitcoin/pull/34860#discussion_r3255163123
2026-05-22 08:31:00 +02:00
MarcoFalke
faf02674b3 refactor: Set TestNode.cli only after RPC is connected
The cli can only be called after the RPC is connected, so the cli field
should only be set after that. This is similar to the _rpc field.

This change has also other benefits:

* Manually overwriting the cli with a new rpchost is no longer needed,
  so one cli-specific line can be removed from the rpc_bind.py test.
* The datadir and rpc_timeout fields are removed from the TestNodeCLI
  struct. They were redundant with the -datadir and -rpcclienttimeout
  command line options. Any command line option can be overwritten by
  appending it with a new value, if needed.
2026-05-22 08:29:59 +02:00
MarcoFalke
fae376cafb refactor: Inline get_rpc_proxy
This is only used and needed in a single place.
2026-05-22 08:25:32 +02:00
MarcoFalke
fa00c7c7a4 test: Allow rpc_bind.py --usecli
This allows to run the test under bitcoin-cli, except for one small
part, which is skipped for now.

This also inlines rpc_url directly into create_new_rpc_connection,
because this is the only place where it is needed.
2026-05-22 08:25:06 +02:00
MarcoFalke
fa8f25118c refactor: Use create_new_rpc_connection in wallet_multiwallet.py 2026-05-22 08:25:00 +02:00
MarcoFalke
fa3ae6c7d3 test: Allow feature_shutdown.py --usecli 2026-05-22 08:24:23 +02:00
MarcoFalke
fa2a3683d5 test: Allow mining_getblocktemplate_longpoll.py --usecli
Part of the diff can be reviewed with --ignore-all-space
2026-05-22 08:23:58 +02:00
Ryan Ofsky
735b1cf431 Merge bitcoin/bitcoin#34806: refactor: logging: Various API improvements
02b2c41103 logging: use util/log.h where possible (Anthony Towns)
57d7495fe5 IWYU fixes (Anthony Towns)
611878b46f scripted-diff: logging: Drop LogAcceptCategory (Anthony Towns)
34332dba2f util/log, logging: Provide ShouldDebugLog and ShouldTraceLog instead of a generic ShouldLog (Anthony Towns)
abea304dd6 logging: Move GetLogCategory into Logger class (Anthony Towns)
58113e5833 util/log: Rename LogPrintLevel_ into detail_ namespace (Anthony Towns)
f69d1ae56d util/log: Provide util::log::NO_RATE_LIMIT to avoid rate limits (Anthony Towns)
72e92d67df logging: Protect ShrinkDebugFile by m_cs (Anthony Towns)
904c0d07bb util/stdmutex: Drop StdLockGuard (Anthony Towns)

Pull request description:

  `ShrinkDebugFile` now takes the logging mutex for its entire run; though it's only called in init so shouldn't have any races in the first place.

  Adds a `NO_RATE_LIMIT` tag that can be used with info/warning/error logs to avoid rate-limiting. This allows `LogPrintLevel_` to be restricted to being an internal API.

  The `GetLogCategory` function is moved out of the global namespace.

  `ShouldLog` is split into separate `ShouldDebugLog` and `ShouldTraceLog` so that filtering checks are somewhat more enforced via function signature checks.

  Redundant `LogAcceptCategory` function is removed.

  More files are pointed at util/log.h instead of logging.h.

ACKs for top commit:
  maflcko:
    review ACK 02b2c41103 📅
  sedited:
    Re-ACK 02b2c41103
  l0rinc:
    untested ACK 02b2c41103
  ryanofsky:
    Code review ACK 02b2c41103435d8dbaa77a526e484066471b2b8c! Overall a lot of nice improvements here.

Tree-SHA512: 3bffdca91afbe5c45a522815fe82e6f4cfa96529a4a243b29aad21234650502d6cac780126b584ee3e7ec129d8fdd50670d8a05036cc5c36e586b8c4c3563970
2026-05-21 23:01:09 -04:00
merge-script
a56b4ead41 Merge bitcoin/bitcoin#35017: mempool: remove all subsequent tx in pkg on failure
ac9aa71b7f mempool: remove all subsequent tx in pkg on failure (Greg Sanders)

Pull request description:

  This belt-and-suspenders check, if ever hit in production, could result in an inconsistent mempool if somehow the parent failed in the ConsensusScriptChecks but the child did not. Rather than allow the mempool to get in an inconsistent state, remove the following txs in the package.

ACKs for top commit:
  ismaelsadeeq:
    Code review ACK ac9aa71b7f
  marcofleon:
    ACK ac9aa71b7f
  sedited:
    ACK ac9aa71b7f

Tree-SHA512: c25310045fa4dfd40bd38c9d54fff3f9fdb817e617154444d4691576393eee5f9cc86e26c59ddcdeef20eb6dddab0a168e91aec85c8291e6d68abbcb333d24f8
2026-05-21 23:28:40 +02:00
merge-script
00e9df90c8 Merge bitcoin/bitcoin#35333: qa: use NORMAL_GBT_REQUEST_PARAMS consistently in functional tests
ca5483a662 qa: use NORMAL_GBT_REQUEST_PARAMS consistently (Antoine Poinsot)

Pull request description:

  Functional tests have a constant that defines normal parameters to `getblocktemplate` but some tests were still hardcoding its value. This PR updates those tests to use the constant instead, so that if normal parameters to `getblocktemplate` need to be changed, it is only necessary to change them in a single place.

  This is preparatory work for the implementation of BIP 54, which introduces a new GBT "forced" rule.

ACKs for top commit:
  fanquake:
    ACK ca5483a662
  sedited:
    ACK ca5483a662

Tree-SHA512: 07374e501ea66ba7b62f610797758fd3528950215b987a50cb18aa844bbf5fb5f9f49aafebc1472bf336de99ff96d1e74f550c09866fdf2882c73b87ac2a715e
2026-05-21 22:53:52 +02:00
merge-script
37d7ce47c5 Merge bitcoin/bitcoin#35350: test: suppress ECONNABORTED in wait_for_rpc_connection on Windows
7209eb7790 test: suppress ECONNABORTED in wait_for_rpc_connection on Windows (Ryan Ofsky)

Pull request description:

  Since bitcoin/bitcoin#33362, `feature_bind_port_externalip.py` auto-detects whether 1.1.1.5 is available by starting a node with `-bind=1.1.1.5` and converting a bind failure into a skip. On Windows CI the address is not configured, so bitcoind exits as expected — but intermittently an RPC probe raises `ConnectionAbortedError` (WSAECONNABORTED/WinError 10053) while the process is shutting down, causing the test to fail rather than skip.

  Fix by treating ECONNABORTED the same as the other transient connection errors already suppressed during startup (ECONNRESET, ETIMEDOUT, ECONNREFUSED).

  Fixes #35343

ACKs for top commit:
  maflcko:
    lgtm ACK 7209eb7790
  willcl-ark:
    utACK 7209eb7790
  hodlinator:
    crACK 7209eb7790

Tree-SHA512: 04cf70a2d9247b32e9302827911b0d00a41aa4ac3cf0ba7a9c2aa86009019b14b3f914a3049e08b66b45ccd00530a77129aecf14a953007d28d3322f5ca16a70
2026-05-21 22:45:32 +02:00
stickies-v
18c1cc65e9 kernel: improve BITCOINKERNEL_WARN_UNUSED_RESULT usage
Similar to [[nodiscard]], BITCOINKERNEL_WARN_UNUSED_RESULT is used
to indicate that ignoring a function's return value is almost
certainly a bug.

It is used in cases such as a resource leak (e.g. an owning handle returned
by a *_create or *_copy function), or when the returned value is itself an
error/status code. It is not used merely because discarding the result is
wasteful, e.g. on getters or predicates.

Fix the incorrect usage, and properly document the attribute.
2026-05-21 20:10:50 +01:00
Ryan Ofsky
7209eb7790 test: suppress ECONNABORTED in wait_for_rpc_connection on Windows
Since bitcoin/bitcoin#33362, feature_bind_port_externalip.py runs in CI and
auto-detects whether 1.1.1.5 is assigned by starting nodes with -bind=1.1.1.5,
then converting a FailedToStartError containing "Unable to bind to" into a
SkipTest. On Windows CI the address is not configured, so bitcoind fails as
expected — but intermittently, while the process is shutting down, an RPC probe
raises ConnectionAbortedError (WSAECONNABORTED/WinError 10053) before
wait_for_rpc_connection() notices that the process has exited. That error was
not in the suppressed set, so it escaped and the test failed instead of being
skipped.

The intermittency is a race on TCP connection timing. If the probe connects
before the RPC port is listening, connect can fail with ECONNREFUSED. If the
TCP connection is established but is then closed abortively during shutdown,
the probe can see a connection-reset/aborted error instead. On POSIX systems
this commonly shows up as ECONNRESET ("connection reset by peer"). Winsock
also has WSAECONNABORTED for cases where an established connection is aborted
locally or otherwise terminated due to a timeout/protocol failure, in addition
to WSAECONNRESET for a reset by the remote side. This is why the
Windows-specific error may need to be suppressed separately.

Fix by treating ECONNABORTED identically to ECONNRESET, ETIMEDOUT, and
ECONNREFUSED: retry the probe rather than raising.

Fix was suggested by willcl-ark in
https://github.com/bitcoin/bitcoin/issues/35343#issuecomment-4507329622

Fixes #35343
2026-05-21 14:57:14 -04:00
Ava Chow
0553ce5ddb Merge bitcoin/bitcoin#35316: musig: Reject empty pubkey list in GetMuSig2KeyAggCache
8ce84321ce musig: Reject empty pubkey list in GetMuSig2KeyAggCache (nervana21)

Pull request description:

  Per [BIP327](https://github.com/bitcoin/bips/blob/master/bip-0327.mediawiki?plain=1#L300), MuSig2 key aggregation is defined for `u` public keys where `0 < u < 2^32`.

  Previously, the code did not handle `u == 0`.

  This patch updates the code to reject an empty pubkey list and adds a regression test.

ACKs for top commit:
  achow101:
    ACK 8ce84321ce
  rkrux:
    lgtm ACK 8ce84321ce

Tree-SHA512: aa662eee92b6c637683b8535fd9e62431538ba58f38d32f4538259f0b534793625b74a3a10c0c5bb23a7ec7ec83925170b23e47574ef4ebde283a18a0b143d86
2026-05-21 11:26:26 -07:00
Hennadii Stepanov
e4f1e43103 ci: Fix path input for vcpkg downloads cache
The `path` inputs for the `cache/save` and `cache/restore` actions must
have identical content.
2026-05-21 18:49:56 +01:00
MarcoFalke
fa99a3ccac ci: Enable pipefail in 03_test_script.sh
This requires re-writing the --show-stats parsing to use --print-stats
parsing, to avoid pipefail failures.
2026-05-21 18:39:59 +02:00
Fabian Jahr
d61053d97b build: Drop libevent from bitcoin-cli link libraries
Co-authored-by: fanquake <fanquake@gmail.com>
2026-05-21 17:53:57 +02:00
Fabian Jahr
798d051c80 cli: Remove libevent usage
This also removes the now-unused raii_evhttp_{request,connection}
helpers from support/events.h.
2026-05-21 17:53:56 +02:00
Antoine Poinsot
ca5483a662 qa: use NORMAL_GBT_REQUEST_PARAMS consistently
Some functional tests were still hardcoding parameters. Using the
constant allows to change the rules in a single place if necessary.
2026-05-21 11:24:29 -04:00
merge-script
bd0942bbd9 Merge bitcoin/bitcoin#34887: fuzz: target CDBWrapper
b63ef20d54 test: add fuzz harness for CDBWrapper (Andrew Toth)
32169c3855 dbwrapper: accept optional testing leveldb::Env in DBParams (Andrew Toth)
8d390c93fc dbwrapper: make max_file_size a configurable DBParams field (Andrew Toth)

Pull request description:

  Inspired by https://github.com/bitcoin/bitcoin/pull/34866#issuecomment-4090291488.

  We currently don't have a dedicated harness targeting `CDBWrapper`. OSS-Fuzz has a [rudimentary harness](https://github.com/google/oss-fuzz/blob/master/projects/leveldb/fuzz_db.cc) for levelDB [which fails](https://issues.oss-fuzz.com/issues/447252244), so doesn't appear maintained.

  This PR adds a harness targeting `CDBWrapper` against an in-memory oracle to verify correctness.

  A `DeterministicEnv` wraps levelDB's `memenv` to eliminate non-determinism by capturing background compaction and running it at fuzzer-chosen points.
  The fuzzer also controls the cache_bytes and max_file_size sizes so that small values trigger memtable flushes and compaction.

ACKs for top commit:
  l0rinc:
    code review ACK b63ef20d54
  marcofleon:
    ACK b63ef20d54
  dergoegge:
    utACK b63ef20d54
  sedited:
    ACK b63ef20d54

Tree-SHA512: da1f738ec90c49830a05b8990bdaa474299b573e966e60f4febef1292d9682f2e50f0016831f26bf4677e5afdaa142dc8766d871c6bce90d35f1695d480ac8c1
2026-05-21 15:03:49 +01:00
merge-script
2940053761 Merge bitcoin/bitcoin#33223: coinselection: Tiebreak SRD eviction by weight
eff9e798b9 coinselection: Tiebreak SRD eviction by weight (Murch)

Pull request description:

  yancyribbens [pointed out](https://github.com/p2pderivatives/rust-bitcoin-coin-selection/pull/108#issuecomment-3202107069) that SRD would fail to find a possible solution if there are multiple UTXOs of the same effective value with diverse weight.

  This adds a tiebreaker that will make SRD succeed in such a scenario.

ACKs for top commit:
  yancyribbens:
    utACK eff9e798b9

Tree-SHA512: 6a26f3c06f3346cef7e06926d9f747ecea91f057435f22fa8c3333f129227cf5a361f45047003e8a762a99225e3df27e3980a8b4397b36dc9b59c44a9626a2ec
2026-05-21 13:47:30 +01:00
Hennadii Stepanov
5ccb698f53 Merge bitcoin-core/gui#936: Remove opt-in RBF
90eda67bb8 Remove opt-in RBF (Pol Espinasa)

Pull request description:

  With the whole network mostly running with Full Replace By Fee, it does not make sense to let the user signal or not to signal for RBF on their transactions.

  With this PR the transactions created using the GUI will fallback to the wallet configuration in order to signal or not to signal BIP 125. (True by default).

ACKs for top commit:
  achow101:
    ACK 90eda67bb8
  sedited:
    ACK 90eda67bb8

Tree-SHA512: 6253501b89ae509eb5bf3c6c81aaf117f03ef2ba411aa3b0a6f05bca07cbf7a1030c519f8825eb2d7269cc286a42ed17c0becccc04ad252bcc9c868086ff4cdc
2026-05-21 13:31:05 +01:00
merge-script
211e1053bf Merge bitcoin/bitcoin#32220: cmake: Get rid of undocumented BITCOIN_GENBUILD_NO_GIT environment variable
3142e5f8cf doc: Add release notes for #32220 (Hennadii Stepanov)
b71cd5c162 cmake: Skip using git when building from source tarball or as subproject (Hennadii Stepanov)
fe941938e8 cmake: Remove unnecessary `BITCOIN_GENBUILD_NO_GIT` environment variable (Hennadii Stepanov)
9a2cced23a cmake, refactor: Move `find_package(Git)` to `src/CMakeLists.txt` (Hennadii Stepanov)

Pull request description:

  In general, the Bitcoin Core build system attempts to fetch commit or tag details from git. This is handled by the [`cmake/script/GenerateBuildInfo.cmake`](https://github.com/bitcoin/bitcoin/blob/master/cmake/script/GenerateBuildInfo.cmake) script, which generates the [`src/bitcoin-build-info.h`](65dcbec756/src/clientversion.cpp (L26-L31)) header within the build tree.

  However, there are cases where the retrieved details may be incorrect—for example, when building from a source tarball or as a subproject within a git-aware project.

  In the Autotools-based build system, the `BITCOIN_GENBUILD_NO_GIT` environment variable was [introduced](https://github.com/bitcoin/bitcoin/pull/7522) in [v0.20.0](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.20.0.md) to address such scenarios:
  > The process for generating the source code release ("tarball") has changed in an effort to make it more complete, however, there are a few regressions in this release:
  > - Instead of running `make` simply, you should instead run `BITCOIN_GENBUILD_NO_GIT=1 make`.

  This PR automagically handles both of the aforementioned cases and removes the need for `BITCOIN_GENBUILD_NO_GIT`.

  The user is still able to configure the build with [`-DCMAKE_DISABLE_FIND_PACKAGE_Git=ON`](https://cmake.org/cmake/help/latest/variable/CMAKE_DISABLE_FIND_PACKAGE_PackageName.html) to disable git execution manually, for [reasons](https://github.com/bitcoin/bitcoin/pull/32220#issuecomment-2780115034) we don't know in advance.

  Closes https://github.com/bitcoin/bitcoin/issues/31999.

ACKs for top commit:
  maflcko:
    review ACK 3142e5f8cf 🥄
  fanquake:
    ACK 3142e5f8cf - tested a few different build scenarios (from Guix the tarball), they all seem to work as intended.

Tree-SHA512: 14995dc76fc680cff2bbc983d525125b39f49397e8ed94fffab29de505723a8e2f7f261c1a7ca88d98776755ccf63e59a32c476e112683f5cc1c016a7cfede94
2026-05-21 12:18:27 +01:00
merge-script
ecf20317cb Merge bitcoin/bitcoin#35270: doc: Document minimum versions for Xcode CLT and MSVC
fa3d7ce11c doc: Document minimum versions for Xcode CLT and MSVC (MarcoFalke)

Pull request description:

  The minimum required Xcode command-line tools version was not documented, which can lead to confusion.

  So document it in `doc/dependencies.md` (along with adding a note one msvc there as well). This also allows to slim down the error message in the configure C++ feature check by referring to `doc/dependencies.md#compiler`.

ACKs for top commit:
  polespinasa:
    reACK fa3d7ce11c
  l0rinc:
    ACK fa3d7ce11c

Tree-SHA512: daa594e39c94f615888b2dfbf7cb8d9f7d16e5539f18a6ee57686b8364de27533f603c2324c5e213504d55a2dce86469254bfce5c0d2af7be059348bceb1d25b
2026-05-21 11:34:25 +01:00
rkrux
97f7cc0233 wallet: mark -walletrbf startup option as deprecated
All transactions are by default replaceable since v28, the wallet need not have
a configuration option to opt into RBF signalling because it seems redundant
now. Emit a warning if this option is used.
2026-05-21 15:23:51 +05:30
rkrux
c4a7613e6a wallet: mark bip125-replaceable key as deprecated in transaction RPCs
Transactions are replaceable by default since v28 and the corresponding
tweaking argument has been removed since v29. The related key from the
mempool RPC has been marked deprecated as well since v29, this patch
does the same for the wallet transaction RPCs such as listtransactions,
listsinceblock, and gettransaction.

Users can pass the -deprecatedrpc=bip125 startup argument to retrieve
this key in the responses of above mentioned RPCs.
2026-05-21 15:23:46 +05:30
merge-script
8ee5622455 Merge bitcoin/bitcoin#35338: qa: regenerate hardcoded regtest chain for kernel lib unit tests
98f706c698 qa: regenerate hardcoded regtest chain for kernel lib unit tests (Antoine Poinsot)

Pull request description:

  The kernel library uses a harcoded regtest block chain in the unit tests. This chain was generated prior to #32155 and its coinbase transactions are not BIP 54 compatible.

  This PR updates the hardcoded chain to be BIP 54 compatible and contain more transactions. It was generated based on the chain from the `wallet_migration.py` functional test as it contains coins for a wide variety of output types (though it may be useful to add more transactions *spending* from these output types). Some trivial hardcoded values in the unit test had to be updated to match the new chain.

ACKs for top commit:
  alexanderwiederin:
    ACK 98f706c698
  sedited:
    ACK 98f706c698

Tree-SHA512: df3370f17e158b36a072877d13f0ee68987fd4002f870e7590e2a24e865e474459b2682ccbdad54934acc452296560c73378597370767f4a557375c594d3c105
2026-05-21 10:30:54 +01:00
merge-script
c6dbf3158b Merge bitcoin/bitcoin#35304: kernel: doc: document wipe lifecycle and best entry nullability
6189335f6b kernel: doc: document wipe lifecycle and best entry nullability (csjones)

Pull request description:

  Document on `btck_chainstate_manager_options_set_wipe_dbs` that a wipe must be followed by `btck_chainstate_manager_import_blocks` before the chainstate manager is used for anything else, as the existing kernel tests already do (specifically the `chainman_reindex*` kernel tests). Note in the `@return` of `btck_chainstate_manager_get_best_entry` that it can return null when no block headers have been loaded.

  Background: I've been working on a bindings project using the libbitcoinkernel and tripped on a SIGSEGV calling the entry accessors on the null pointer returned by `get_best_entry` after a `(true, true)` wipe (#35293). The C++ wrapper handles this via `btck::check<>`, but bindings generated from the C header don't see the wrapper. Adding a nullability documentation hint helps generators produce the correct signature, and the `@note` on `set_wipe_dbs` documents the lifecycle that avoids the null in the first place.

  Docs-only change; no tests ran.

ACKs for top commit:
  sedited:
    ACK 6189335f6b
  alexanderwiederin:
    ACK 6189335f6b

Tree-SHA512: 319d9704c9857c8eb12e8726d16710d8b5777404f8ecf50d832a5e5b0a9b9f0d8321074ecb8b985e5b03a6eb7119cc4eb73f36d096dc0149a73de7d6a74de4cb
2026-05-21 10:06:14 +02:00
optout
f05b1a3532 rpc: Fix for duplicate external signers case
In case of multiple external signers, with some duplicates,
de-duplicate them: keep one signer per fingerprint, and
keep all non-duplicates as well. Add a new test check.
2026-05-21 06:27:47 +02:00
Antoine Poinsot
98f706c698 qa: regenerate hardcoded regtest chain for kernel lib unit tests 2026-05-20 16:04:58 -04:00
Greg Sanders
ac9aa71b7f mempool: remove all subsequent tx in pkg on failure
This belt-and-suspenders check, if ever hit in production,
could result in an inconsistent mempool if somehow the
parent failed in the ConsensusScriptChecks but the child did
not. Rather than allow the mempool to get in an inconsistent
state, remove the following txs in the package.
2026-05-20 15:05:47 -04:00
Andrew Toth
b63ef20d54 test: add fuzz harness for CDBWrapper
Introduces a libFuzzer harness that exercises CDBWrapper operations
against a std::map oracle, with a DeterministicEnv that captures LevelDB
background compaction for single-threaded determinism.

A sibling dbwrapper_threaded target uses a bare memenv so LevelDB's real
background thread runs, exercising force_compact and threaded compaction
paths that the deterministic variant cannot reach.

Adds an implicit-integer-sign-change suppression for
BytewiseComparatorImpl::FindShortSuccessor (leveldb/util/comparator.cc:58)
to the test ubsan suppressions list. LevelDB's bytewise comparator
implicitly converts a signed `char` byte to `uint8_t` there. The path
is only reached when compaction picks an SST boundary key, so it
requires a small enough max_file_size for compaction to fire during
the fuzz run.

Co-authored-by: l0rinc <pap.lorinc@gmail.com>
2026-05-20 11:03:36 -04:00
Andrew Toth
32169c3855 dbwrapper: accept optional testing leveldb::Env in DBParams
Allow callers to inject a custom leveldb::Env via DBParams::testing_env,
which takes priority over the memory_only in-memory environment. This
enables fuzz harnesses to supply a deterministic environment.
2026-05-20 11:03:35 -04:00
Andrew Toth
8d390c93fc dbwrapper: make max_file_size a configurable DBParams field
Useful for fuzzing different values.
2026-05-20 11:03:35 -04:00
Fabian Jahr
376e7ef07c util: Expose IOErrorIsPermanent in sock header
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
2026-05-20 16:39:20 +02:00
merge-script
b796bf44f3 Merge bitcoin/bitcoin#35228: wallet: use outpoint when estimating input size
cd8d3bd937 wallet: use outpoint when estimating input size (Lőrinc)

Pull request description:

  ### Problem
  `CalculateMaximumSignedInputSize()` is passed the outpoint being sized, but a previous refactor stopped using that context when estimating the signed input size.
  This could make externally selected inputs look slightly smaller than they really are.

  ### Fix
  Pass the outpoint through again when estimating the signed input size.
  Add a regression test for the external-input case.

  > [!NOTE]
  > the branch name still reflects the previous state of this PR, where the unused parameter was removed instead of wired back in

ACKs for top commit:
  achow101:
    ACK cd8d3bd937
  pablomartin4btc:
    ACK cd8d3bd937

Tree-SHA512: 6089ae65ae12677c32be0556d704f8c179f1ff5a017690846ae495644890526f85d8c0d75d4ec4c3c9ac5b519251169009484623340b8bc3a87fa9a3be27fefd
2026-05-20 15:23:25 +01:00
merge-script
3158b890e1 Merge bitcoin/bitcoin#33765: doc: update interface, --stdin flag, signtx (#31005)
3381855e51 doc: external signer: update interface, --stdin flag, IPC-command signtx, contains updates from #33947 (Danny van Heumen)

Pull request description:

  Updates to documentation for External Signer.

  - Added mention that `signtransaction` command is no longer primary mechanism.
  - Document inter-process communication via `--stdin` flag followed with stdin-content.
  - Document `signtx` command followed by Base64-encoded PSBT.

ACKs for top commit:
  Sjors:
    ACK 3381855e51
  naiyoma:
    ACK 3381855e51

Tree-SHA512: e9c666c7a9de08a148846c8d2d1fc2905ba7ce672b7baad35fd9d7a693bfd9beae99e29134aa24282fc14d2de86bbf653ad15e167658a075d4ec9f5bcdbaabdd
2026-05-20 14:01:52 +01:00
merge-script
21edcc47e2 Merge bitcoin/bitcoin#35328: test: restore assertion that tx contains exactly 2500 sigops
ae73b69b52 test: restore assertion that tx contains exactly 2500 sigops (ismaelsadeeq)

Pull request description:

  darosior wrote https://github.com/bitcoin/bitcoin/pull/29060#discussion_r3267762329:

  _This is useful documentation, plus useful in making sure the comment above the check does not become stale or incorrect._

  Hence reverted.

ACKs for top commit:
  l0rinc:
    code review ACK ae73b69b52
  sedited:
    ACK ae73b69b52
  willcl-ark:
    ACK ae73b69b52

Tree-SHA512: 2c76e9b66e367613c1232b65b1c18f2d0c1068acdf712ca0937dae465e637b024df95d6479f26cc5d04e5767e711eb5b3f3a329207af75ee64c7bfc8bc9173f6
2026-05-20 13:17:41 +01:00
Fabian Jahr
5d562430de netbase: Add timeout parameter to ConnectDirectly
Co-authored-by: w0xlt <94266259+w0xlt@users.noreply.github.com>
2026-05-20 13:39:20 +02:00
MarcoFalke
fa37c6a529 test: [move-only] Extract create_new_rpc_connection
Re-using the same rpc connection on multiple threads is obviously
unsafe, so this helper can be used to create one connection per thread.

This refactor does not change any behavior and can be reviewed with the
git options:

--color-moved=dimmed-zebra --color-moved-ws=ignore-all-space
2026-05-20 13:17:07 +02:00
Fabian Jahr
a988ac592f cli: Add HTTPResponseHeaders class for parsing response headers
Adds a small class to parse and query the field lines of an HTTP
response. Used by the upcoming libevent-free HTTPClient implementation.
2026-05-20 13:10:09 +02:00