Commit Graph

48770 Commits

Author SHA1 Message Date
Fabian Jahr
4117b92e67 fuzz: Improve torcontrol fuzz test
Gets rid of the Dummy class and adds coverage of get_socks_cb.

Also explicitly handles an exception case within Torcontrol rather than
relying on a guard in the fuzz test.
2026-04-03 22:00:29 +02:00
Fabian Jahr
b1869e9a2d torcontrol: Move tor controller into node context
Co-authored-by: sedited <seb.kung@gmail.com>
2026-04-03 22:00:29 +02:00
Fabian Jahr
eae193e750 torcontrol: Remove libevent usage
Replace libevent-based approach with using the Sock class and CThreadInterrupt.
2026-04-03 22:00:26 +02:00
Cory Fields
242b0ebb5c btcsignals: use a single shared_ptr for liveness and callback
This simplifies the implementation and eliminates an unnecessary shared_ptr.

Suggested by Marco Falke.

<Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
2026-04-03 18:25:30 +00:00
Cory Fields
b12f43a0a8 signals: remove boost::signals2 from depends and vcpkg 2026-04-03 18:20:50 +00:00
Cory Fields
a4b1607983 signals: remove boost::signals2 mentions in linters and docs
The documented example is no longer relevant, so remove it rather than updating
it to mention btcsignals.
2026-04-03 18:20:50 +00:00
Cory Fields
375397ebd9 signals: remove boost includes where possible
In both of these cases, boost was only needed for signals and not for
multi_index/test.
2026-04-03 18:20:50 +00:00
Cory Fields
091736a153 signals: re-add forward-declares to interface headers
The real includes were only needed temporarily while supporting btcsignals as
an alias for boost::signals2.
2026-04-03 18:20:50 +00:00
Cory Fields
9958f4fe49 Revert "signals: Temporarily add boost headers to bitcoind and bitcoin-node builds"
This reverts commit 3df1a1405972076384946c71c45bb056cfdf8c41.

This was only necessary as an interim workaround.
2026-04-03 18:20:50 +00:00
Cory Fields
34eabd77a2 signals: remove boost compatibility guards
These were necessary to work around unnecessary constraints that have been
fixed in the (upcoming) boost::signals2 version 1.91.

Our implementation's constraints match those of that version.
2026-04-03 18:20:50 +00:00
Cory Fields
e60a0b9a22 signals: Add a simplified boost-compatible implementation
This re-implements the tiny portion of boost::signals2 that we currently use.

It is enough to be useful as a generic multicast callback mechanism.
2026-04-03 18:20:50 +00:00
Cory Fields
63c68e2a3f signals: add signals tests
These tests are compatible with boost::signals2 as well as the replacement
implementation that will be introduced in the next commit.

This is intended to demonstrate some equivalency between the implementations.
2026-04-03 17:11:28 +00:00
Eugene Siegel
d517fa0a94 rpc: fix initialization-order-fiasco by lazy-init of decodepsbt_inputs
Prior to this commit, decodepsbt_inputs would call TxDoc during initialization
which lives in another TLU. TxDoc relies on CURRENCY_UNIT to be initialized when
it may not have been (note this is different from the TLU containing
decodepsbt_inputs which also has a CURRENCY_UNIT). Fix this by lazy initializing
decodepsbt_inputs.

Prevent the issue from occurring in the future by also doing the same for
decodepsbt_outputs and getblock_vin.
2026-04-03 12:20:41 -04:00
fanquake
f1e14dfbe9 depends: remove workaround for Make older than 4.2.90
This was introduced for distros shipping older make, such as
Ubuntu 20.04 (4.2.1). It's likely that all distros being used for
Darwin and Qindows cross compilation, are shipping a newer make at
this point.
2026-04-03 09:18:59 +08:00
Ava Chow
fa1f4feac4 Merge bitcoin/bitcoin#34965: cli: Return more helpful authentication errors
257769a7ce qa: Improve error message (Hodlinator)
20a94c1524 cli: Clearer error messages on authentication failure (Hodlinator)
84c3f8d325 refactor(rpc): GenerateAuthCookieResult -> AuthCookieResult (Hodlinator)

Pull request description:

  Increases precision of error messages to help the user correct authentication issues.

  Inspired by #34935.

ACKs for top commit:
  davidgumberg:
    utACK 257769a7ce
  maflcko:
    review ACK 257769a7ce 🦇
  achow101:
    ACK 257769a7ce
  janb84:
    concept ACK 257769a7ce

Tree-SHA512: 1799db4b2c0ab3b67ed3d768da08c6be4f4beaad91a77406884b73950b420c8264c70b8e60a26a9e6fac058370f6accdb73c821d19bebb6edfbc8d7b84d01232
2026-04-02 15:55:28 -07:00
Ava Chow
4b98962731 Merge bitcoin/bitcoin#34448: ci, iwyu: Fix warnings in src/util and treat them as errors
8b49e2dd4e ci, iwyu: Fix warnings in `src/util` and treat them as errors (Hennadii Stepanov)
6953363be8 refactor: Move license info into new module (Hennadii Stepanov)
eb750d277b iwyu: Remove workaround for issue that has been fixed upstream (Hennadii Stepanov)

Pull request description:

  This PR [continues](https://github.com/bitcoin/bitcoin/pull/33725#issuecomment-3466897433) the ongoing effort to enforce IWYU warnings.

  See [Developer Notes](https://github.com/bitcoin/bitcoin/blob/master/doc/developer-notes.md#using-iwyu).

ACKs for top commit:
  achow101:
    ACK 8b49e2dd4e
  maflcko:
    review ACK 8b49e2dd4e 👘
  BrandonOdiwuor:
    Code Review ACK 8b49e2dd4e

Tree-SHA512: f6a21d58947f714be7ad3c230857a7c974ac4c1b5099f1e8e8db9b6e3e01ba12270481e39a1c3cb8d93f326cea4f33c662becc65c80e46a38c6b49bb0c2f523f
2026-04-02 15:48:53 -07:00
Ava Chow
59199fa5ea Merge bitcoin/bitcoin#33908: kernel: add context‑free block validation API (btck_check_block_context_free) with POW/Merkle flags
0587c56091 kernel: Expose context-free block validation (w0xlt)
71f827c3c2 kernel: Expose consensus parameters (`btck_ConsensusParams`) (w0xlt)

Pull request description:

  This PR exposes Bitcoin Core’s context‑free block checks to library users via a new C API entry point, `btck_check_block_context_free`.

  Callers can validate a block’s structure (size/weight, coinbase rules, per‑tx context‑free checks) and optionally re‑run Proof‑of‑Work and Merkle‑root verification without touching chainstate, the block index, or the UTXO set.

  Rationale
  Clients embedding the kernel need a pure block sanity check without requiring node state or disk writes (candidate block validation, for example). This API offers that surface in a single call, with optional PoW/Merkle toggles to avoid redundant work when the header has already been validated or when Merkle verification is deferred.

ACKs for top commit:
  yuvicc:
    re-ACK 0587c56091
  achow101:
    ACK 0587c56091
  sedited:
    ACK 0587c56091

Tree-SHA512: 6bd53e4964909335d1f2fee30ff96c95a8dd2c84bcdfe11c50ba369301822e5dea9bbe2376bb6d6b4652875152071eb0446657042b00429f29581da4fcea71a9
2026-04-02 15:28:07 -07:00
Fabian Jahr
fc736013a5 rpc: Add in_memory option to dumptxoutset with rollback 2026-04-02 23:39:44 +02:00
Fabian Jahr
d0fd718948 test: Extend named pipe sqlite tool test to use rollback 2026-04-02 23:39:44 +02:00
Fabian Jahr
ab9463efac test: Add dumptxoutset fork test 2026-04-02 23:39:44 +02:00
Fabian Jahr
49d5e835a8 rpc: Don't invalidate blocks in dumptxoutset
Instead this new approach uses a temporary coins db to roll back the
UTXO set.

This new approach also prevents the node from pruning necessary blocks
during dumptxoutset execution by using prune locks.
2026-04-02 23:39:40 +02:00
Fabian Jahr
fe58eb9850 blockstorage: Add DeletePruneLock
Also adds basic unit test coverage for prune lock management methods.
2026-04-02 23:27:10 +02:00
Ava Chow
037ea2c714 walletdb: Remove m_mock from SQLiteDatabase 2026-04-02 11:39:05 -07:00
Ava Chow
59484e2fdb wallet: Make Mockable{Database,Batch} subclasses of SQLite classes
The mocking functionality of MockableDatabase, MockableBatch, and
MockableCursor was not really being used. These are changed to be
subclasses of their respective SQLite* classes and will use in-memory
SQLite databases so that the tests are more representative of actual
database behavior.

MockableCursor is removed as there are no overrides needed in
SQLiteCursor for the tests.
2026-04-02 11:18:26 -07:00
Ava Chow
b69f989dc5 wallet, bench: Use TestingSetup in CoinSelection benchmark 2026-04-02 11:18:26 -07:00
Ava Chow
e7d67c9fd9 test: Make duplicating MockableDatabases use cursor and batch
Instead of directly copying the stored records map when duplicating a
MockableDatabase, use a Cursor to read the records, and a Batch to write
them into the new database. This prepares for using SQLite as the
database backend for MockableDatabase.
2026-04-02 11:18:26 -07:00
Ava Chow
964eafb71c bench, wallet: Make WalletMigration's setup WalletBatch scoped
WalletBatch needs to be in a scope so that it is destroyed before the
database is closed during migration.
2026-04-02 11:18:26 -07:00
MarcoFalke
facaeb9c76 doc: Discourage trailing doxygen comments, and fix the broken ones 2026-04-02 15:41:14 +02:00
Ava Chow
8cc690ea9b Merge bitcoin/bitcoin#34379: wallet: fix gethdkeys RPC for descriptors with partial xprvs
43c528aba9 wallet, test: update `gethdkeys` functional test (rkrux)
6e3a0afc2f wallet: fix `gethdkeys` RPC for descriptors with partial xprvs (rkrux)

Pull request description:

  Fixes #34378

  A non-watch-only wallet allows to import descriptors with partial private keys, eg: a multisig descriptor with one private key and one public key. In case an xpub is imported in any such descriptors whose private key the wallet doesn't have, then the `gethdkeys` RPC throws an unhandled error like below when the private keys are requested.

  This fix ensures that such calls are properly handled by conditionally finding the corresponding xprv and the related functional test is accordingly updated.

  ```
  ➜ bitcoincli -named gethdkeys private=true
  error code: -1
  error message:
  map::at:  key not found
  ```

ACKs for top commit:
  achow101:
    ACK 43c528aba9
  w0xlt:
    ACK 43c528aba9
  Eunovo:
    Tested ACK 43c528aba9

Tree-SHA512: 106e02ee368a3fa94d116f54f2fa71f9886e4753e331b91ce13a346559d5497ef6cd7ddaa8736fcfe1a7ac427a44d647fb75e523eb72f917fa866adbe0dbad30
2026-04-01 14:32:49 -07:00
Ava Chow
194f57109d Merge bitcoin/bitcoin#34976: lint: Clarify rmtree/remove_all error message with preferred alternatives
fa955af618 lint: Clarify rmtree/remove_all error message with preferred alternatives (MarcoFalke)

Pull request description:

  An error message without a suggestion to fix will often lead developers to come up with a creative solution to side-step the grep in the linter (such as using an `auto` alias or other style-change).

  Try to avoid this by mentioning a recommended solution.

ACKs for top commit:
  davidgumberg:
    ACK fa955af618
  achow101:
    ACK fa955af618
  hodlinator:
    ACK fa955af618

Tree-SHA512: d5741b2fdb1cfcffc26144c3bb78478e46d7ecb5c3340cbb09584fe1274a3cc8c6872b997e33b8bd2097630d916133a3f5bf41a1d09527e597be9829d6d3e51b
2026-04-01 13:28:42 -07:00
w0xlt
fc9987dfc6 doc: remove stale shortid collision TODO
PartiallyDownloadedBlock::InitData() intentionally treats duplicate short IDs in a compact block as READ_STATUS_FAILED.

For an honest peer, block-level short-ID collisions are rare enough that failing the compact block early is preferable to spending CPU scanning the mempool or attempting selective recovery.

Remove the old TODO that suggested requesting both collided transactions, since it since it points at unwanted behavior.
2026-04-01 11:53:14 -07:00
Ava Chow
1189702d2f Merge bitcoin/bitcoin#34982: kernel: Remove NONNULL annotation from destroy method
75608547b4 kernel: Remove NONNULL annotation from destroy method (Alexander Wiederin)

Pull request description:

  Follow-up to https://github.com/bitcoin/bitcoin/pull/33796#discussion_r2959817508

  ### Summary
  This PR removes the `BITCOINKERNEL_ARG_NONNULL` annotation from the `btck_block_validation_state_destroy` method in the Kernel API.

  ### Motivation
  No other *_destroy function in the Kernel API carries the NONNULL annotation. Following the convention set by free(), destroy functions should accept null pointers.

  ### Usage:
  Before:
  ```c
  btck_BlockValidationState* state = NULL;
  btck_block_validation_state_destroy(state); // violates nonnull contract
  ```

  After:
  ```c
  btck_BlockValidationState* state = NULL;
  btck_block_validation_state_destroy(state); // well-defined
  ```

ACKs for top commit:
  yuvicc:
    lgtm! ACK 75608547b4
  kevkevinpal:
    ACK [7560854](75608547b4)
  achow101:
    ACK 75608547b4
  janb84:
    ACK 75608547b4
  theStack:
    ACK 75608547b4
  w0xlt:
    ACK 75608547b4
  stickies-v:
    ACK 75608547b4

Tree-SHA512: 9577098940f49b8f7fd1fb20afe750e9eaaf9d90d25ec3c4f423de223a1fbd0bca6d520061f576eb3923f18e1f2744b3f60d0d0715dfa3832fea83cb538170c2
2026-04-01 11:34:13 -07:00
Ava Chow
52c3381fa8 Merge bitcoin/bitcoin#33506: test: sock: Enable all socket tests on Windows
9316d96240 test: sock: Enable socket pair tests on Windows (David Gumberg)

Pull request description:

  Some `class Sock`  tests were previously disabled because Windows lacks [`socketpair(2)`](https://man7.org/linux/man-pages/man2/socketpair.2.html) which is used as a helper function in the socket tests, but is not strictly necessary or related to the `Socket` class under testing. This PR adds a `CreateSocketPair()` helper which creates a sender socket and receiver socket with a TCP connection, enabling these test cases for Windows. This also enables future tests that require more granular control over sockets than what `socketpair()` allows for, like using `setsockopt()` before connecting a socket.

  This change is generally an improvement, but is also broken out of a [branch](github.com/davidgumberg/bitcoin/tree/2025-09-02-0xB10C-prefill-rebase) that does compact block prefilling up to the available bytes in the connection's current TCP window (see [delving post](https://delvingbitcoin.org/t/stats-on-compact-block-reconstructions/1052/34)). Creating connected socket pairs is useful for added tests in that branch that validate querying the current TCP window state, and without this change those tests don't run on Windows.

ACKs for top commit:
  achow101:
    ACK 9316d96240
  sedited:
    ACK 9316d96240
  w0xlt:
    reACK 9316d96240

Tree-SHA512: 23ad7070555bb934b0eb18d114e918bd2d50657d20d2221d8c98cd0e558e27e32e5ef89e8074c108a90d7309e539318d23cea43d2ad8eb10e635b114f5f1a87d
2026-04-01 11:22:40 -07:00
Hennadii Stepanov
24609389a4 Merge bitcoin/bitcoin#34986: docs: remove duplicate ///@} from bitcoinkernel.h
7abf6f6fb6 docs: remove duplicate ///@} from bitcoinkernel.h (Alexander Wiederin)

Pull request description:

  ### Summary

  Removes a redundant **group end marker** in the kernel API docs.

  ### Motivation

  Cleans kernel API documentation.

ACKs for top commit:
  maflcko:
    lgtm ACK 7abf6f6fb6
  kevkevinpal:
    ACK [7abf6f6](7abf6f6fb6)
  theStack:
    ACK 7abf6f6fb6

Tree-SHA512: a5b9895c2f2bbce7a13197ab18e4f1fafe3e27062f16d63a077cd6b8633f5c82014167f7bb3142217f772a96fc3b41be49d0753e6ef8e0693afe59d030c74432
2026-04-01 18:33:59 +01:00
Alexander Wiederin
7abf6f6fb6 docs: remove duplicate ///@} from bitcoinkernel.h 2026-04-01 16:47:51 +02:00
Bruno Garcia
91cd0e3aaa fuzz: remove GetDescriptorChecksum from string harness
This function is already strongly fuzzed by other harness.
E.g: descriptor_parse calls it several times during parsing
and serialization. Also, calling GetDescriptorChecksum with
a string of length 32 is not effective to exercise it.
2026-04-01 10:43:23 -03:00
Alexander Wiederin
75608547b4 kernel: Remove NONNULL annotation from destroy method
No other *_destroy function in the Kernel API carries this annotation.
Following the convention set by free(), destroy functions should accept
null pointers.
2026-04-01 13:23:54 +02:00
MarcoFalke
fa955af618 lint: Clarify rmtree/remove_all error message with preferred alternatives 2026-04-01 10:21:52 +02:00
merge-script
8e789322c5 Merge bitcoin/bitcoin#34944: guix: Clean up module list in manifest
325f743eed guix: Clean up module list in manifest (Hennadii Stepanov)

Pull request description:

  These modules are no longer in use:

  1. `cmake-build-system` since bitcoin/bitcoin#34550.

  2. `gnu-build-system` since bitcoin/bitcoin#34627.

  3. `download` since bitcoin/bitcoin#34550.

  4. `cc-for-target` from `utils` since bitcoin/bitcoin#34627.

ACKs for top commit:
  janb84:
    ACK 325f743eed

Tree-SHA512: 5f32a74cc5c13cd4cd181f6d23fe5198e71a0d8f18378f4a2e38aa7a06eedd6f2c5cfbeea9b8eb50baac4d6c5c5bf6aa4d898143c8f2f9899871c6c2991d1b59
2026-04-01 10:53:21 +08:00
merge-script
8b461c530e Merge bitcoin/bitcoin#34956: depends, qt: Fix build on aarch64 macOS 26.4
3aeccb7d73 depends, qt: Fix build on aarch64 macOS 26.4 (Hennadii Stepanov)

Pull request description:

  Fixes https://github.com/bitcoin/bitcoin/issues/34951.

  See an upstream issue: https://qt-project.atlassian.net/browse/QTBUG-145239.

ACKs for top commit:
  fanquake:
    ACK 3aeccb7d73

Tree-SHA512: ab8bc42072077d72068eac17ba5d69c98f313dd4e13c5ffcd3a3cc33eb5f8afe2495f470410edc4a8ee60a6c0942c5b117dcf0a46b2194388db2eee82ee69f86
2026-04-01 08:27:50 +08:00
merge-script
aeb667f6b7 Merge bitcoin/bitcoin#33343: help: enrich help text for -loadblock
2e041b4905 help: enrich help text for `-loadblock` (Hao Xu)

Pull request description:

  `-loadblock` doesn't support XOR-ed files, mention it in its help text to avoid troubles for users.

ACKs for top commit:
  maflcko:
    lgtm ACK 2e041b4905
  sedited:
    ACK 2e041b4905

Tree-SHA512: 1883824c15687799d60ddabc53d5dc2c274e56c8292da5e7e412adaef65abf70c7f778ef7675c65f738c1e4855e5b0f929e87631b0a52695873e58f8245b3a8d
2026-04-01 08:15:54 +08:00
Ava Chow
0831173c01 Merge bitcoin/bitcoin#34640: wallet: rpc: Improve error message for low feerates.
98fcd7af23 wallet: rpc: Improve error message for low feerates. (David Gumberg)

Pull request description:

  Giving the user a hint about what action to take when they encounter an error related to a feerate that is below the minimum. I encountered this myself not knowing about `-mintxfee` and the manpage was slightly less than clear,

  ```
         -mintxfee=<amt>

                Fee rates (in BTC/kvB) smaller than this are considered zero fee for  transaction  creation
                (default: 0.00001)
  ```

ACKs for top commit:
  achow101:
    ACK 98fcd7af23
  ismaelsadeeq:
    ACK  98fcd7af23
  w0xlt:
    ACK 98fcd7af23

Tree-SHA512: 8471bfd5682ca59137541ab4da670e85947cf7812baa9e07d816e352fccfb5e0e71a06c2baf1a5422d78a7da8c08b9fcbb73d85cc9daba88b7c22e802abe5b2e
2026-03-31 11:38:44 -07:00
merge-script
d0ed369b3b Merge bitcoin/bitcoin#34049: rpc: Disallow captures in RPCMethodImpl
5a81d73a81 scripted-diff: rpc: Don't pointlessly capture in RPCMethod lambdas (Anthony Towns)
4e789299af scripted-diff: rpc: Rename RPCHelpMan to RPCMethod (Anthony Towns)

Pull request description:

  When defining `RPCHelpMan` objects, we usually return a lambda, and mostly we define those via `[&](...) { ... }` which explicitly captures any parameters or local variables by reference. If we were to actually use any of those captures (we don't), we would invoke undefined behaviour. So instead, convert all the `[&]` to `[]` to avoid capturing.

  While we're at it, rename `RPCHelpMan` to `RPCMethod`, reflecting its greater responsibility since #19386.

ACKs for top commit:
  maflcko:
    review ACK 5a81d73a81 🏣
  stickies-v:
    ACK 5a81d73a81
  rkrux:
    code review ACK 5a81d73a81

Tree-SHA512: 72e9232857ba5bf4c346fb963a2028047f7c7e9b420ef58b3108669204bfbb6952342cfcfd2e8a06f813a21545abf7fc8b0ad422f00d7ec9c1134626cd1650e6
2026-04-01 00:08:28 +08:00
merge-script
5deed3deab Merge bitcoin/bitcoin#34958: test: mining: add coverage for GBT's "coinbasevalue" result field
12c3c3f81d test: mining: add coverage for GBT's "coinbasevalue" result field (Sebastian Falbesoner)

Pull request description:

  This PR adds missing coverage for the "coinbasevalue" result field of the `getblocktemplate` RPC call. Specifically, the introduced test checks that the value is set to claim the full block reward (subsidy plus fees). Can be verified with the following patch, which succeeds on master and fails on the PR branch:

  ```diff
  diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp
  index a935810d91..ba9ac9dadb 100644
  --- a/src/rpc/mining.cpp
  +++ b/src/rpc/mining.cpp
  @@ -998,7 +998,7 @@ static RPCHelpMan getblocktemplate()
       result.pushKV("previousblockhash", block.hashPrevBlock.GetHex());
       result.pushKV("transactions", std::move(transactions));
       result.pushKV("coinbaseaux", std::move(aux));
  -    result.pushKV("coinbasevalue", block.vtx[0]->vout[0].nValue);
  +    result.pushKV("coinbasevalue", block.vtx[0]->vout[0].nValue - 1);
       result.pushKV("longpollid", tip.GetHex() + ToString(nTransactionsUpdatedLast));
       result.pushKV("target", hashTarget.GetHex());
       result.pushKV("mintime", GetMinimumTime(pindexPrev, consensusParams.DifficultyAdjustmentInterval()));

  ```

  I'm not sure how relevant this field is nowadays in real-world mining scenarios (we use it for the signet miner at least), but it seems useful to have a test for it anyways. Stumbled upon this while looking at https://github.com/bitcoin-inquisition/bitcoin/pull/111.

ACKs for top commit:
  maflcko:
    lgtm ACK 12c3c3f81d
  Sjors:
    ACK 12c3c3f81d

Tree-SHA512: ae10f63c99b21cf7771feefe3d0e47b2e0d511aceb344cf11efa9182d78f2960f1e079797b8a36db110a3c54acb27a3706413a710a74bf56aed29ea162a6aab2
2026-03-31 23:57:26 +08:00
merge-script
54fa356365 Merge bitcoin/bitcoin#34957: policy: remove incorrect MANDATORY_SCRIPT_VERIFY_FLAGS comment
5fa6898818 policy: remove incorrect MANDATORY_SCRIPT_VERIFY_FLAGS comment (ismaelsadeeq)

Pull request description:

  Since https://github.com/bitcoin/bitcoin/pull/33050

  This comment claiming that failing mandatory script checks may trigger a DoS ban/punishment is false.
  `CheckInputScript` also dispute this comment.

  b0f68f0a3a/src/validation.cpp (L2113-L2118)

ACKs for top commit:
  darosior:
    utACK 5fa6898818
  instagibbs:
    ACK 5fa6898818

Tree-SHA512: 84ad68b158e334b0e945f33007de58807b0b3335b1873412b0f359f0fa52d0819e93f42b28ebb6fbe5b355f2710f61e0dd731dc4bce20ccc1b7b2c546a9df550
2026-03-31 23:44:41 +08:00
merge-script
4757b71aa7 Merge bitcoin/bitcoin#34938: refactor: Return std::optional over bool+mut&
fabab69e9e refactor: Return std::optional from ParseDouble (MarcoFalke)
fa0a09441d refactor: Return std::optional from GetWalletNameFromJSONRPCRequest (MarcoFalke)
fafb0c4cbe refactor: Return std::optional from GetLogCategory (MarcoFalke)

Pull request description:

  Using a bool to indicate whether a mutable in-out param was written to is fine in legacy code, but otherwise confusing and brittle:

  * Sometimes the in-out-param is written to, even when the function returns `false`, like in `ParseDouble`.
  * Call sites must manually check the return value

  Fix those issues by returning `std::optional<_>` from `ParseDouble` (and a few other functions).

  This refactor is a style cleanup and does not change any behavior.

ACKs for top commit:
  stickies-v:
    re-ACK fabab69e9e
  hodlinator:
    crACK fabab69e9e
  rkrux:
    code review ACK fabab69e9e

Tree-SHA512: e27a27174e9d2200da8b0ca9b6cc056e94d2b25e6332975f1ad660ee85b02680a65ac93b2ed29f10da0ae5f6dc8395bddc9e973a3f925c68a0c8116c9282ea09
2026-03-31 23:42:49 +08:00
Hodlinator
257769a7ce qa: Improve error message 2026-03-31 12:25:06 +02:00
Hodlinator
20a94c1524 cli: Clearer error messages on authentication failure
Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
2026-03-31 12:25:05 +02:00
Hodlinator
84c3f8d325 refactor(rpc): GenerateAuthCookieResult -> AuthCookieResult
Type will be used for reading the cookie in next commit.

Also corrects ERR/ERROR mismatch in docstring in request.h, and changes to CamelCase to avoid potential collision with Windows headers (https://github.com/bitcoin/bitcoin/pull/34965#issuecomment-4161331392).
2026-03-31 12:15:17 +02:00
MarcoFalke
fa244b984c refactor: Use NodeClock::time_point for m_last_send/recv and m_ping_start
The two fields represent a time point, not a duration. Also, it is
unclear why they use second precision.

Fix both issues by using NodeClock::time_point.

This refactor should not change any behavior.

This resolves the two temporary calls to time_since_epoch() added in the
previous commit. However, it adds one new call to time_since_epoch(),
which is resolved in the next commit.
2026-03-31 09:48:08 +02:00