Commit Graph

45832 Commits

Author SHA1 Message Date
Ava Chow
2e97541396 Merge bitcoin/bitcoin#32944: wallet: Remove upgradewallet RPC
d89c6fa4a7 wallet: Remove `upgradewallet` RPC (w0xlt)

Pull request description:

  Based on discussions  in https://github.com/bitcoin/bitcoin/pull/32803, this PR proposes removing the ` upgradewallet`  RPC.

ACKs for top commit:
  maflcko:
    review ACK d89c6fa4a7 🤙
  achow101:
    ACK d89c6fa4a7
  pablomartin4btc:
    ACK d89c6fa4a7
  brunoerg:
    Concept & light cr ACK d89c6fa4a7

Tree-SHA512: 9ab89c9137ff83d7826da6b9d00d3617149a5d144129086a2685ee525087534c5ed06259075c0689ded52d33e075acb5067d185be04ecc638e27469f958f9a56
2025-07-25 12:59:52 -07:00
Ava Chow
b08041cac8 Merge bitcoin/bitcoin#32845: rpc, test: Fix JSON parsing errors in unloadwallet and getdescriptoractivity RPCs
c5c1960f93 doc: Add release notes for changes in RPCs (pablomartin4btc)
90fd5acbe5 rpc, test: Fix error message in getdescriptoractivity (pablomartin4btc)
39fef1d203 test: Add missing logging info for each test (pablomartin4btc)
53ac704efd rpc, test: Fix error message in unloadwallet (pablomartin4btc)
1fc3a8e8e7 rpc, test: Add EnsureUniqueWalletName tests (pablomartin4btc)
b635bc0896 rpc, util: Add EnsureUniqueWalletName (pablomartin4btc)

Pull request description:

  Currently, `unloadwallet` RPC call fails with a JSON parsing error when no `wallet_name` argument is provided. This behavior is misleading because the error originates from a low-level JSON type mismatch, rather than clearly indicating that the wallet name or RPC endpoint (`-rpcwallet=...`) is missing. Also, found out that the [issue](https://github.com/bitcoin/bitcoin/pull/13111#issuecomment-398831543) was noticed during its implementation but never addressed.

  In addition, I've verified all RPC commands calls finding that `getdescriptoractivity` had the same problem, but related to the array input types (blockhashes & descriptors), so I've corrected that RPC as well. For consistency I've added the missing logging info for each test case in `test/functional/rpc_getdescriptoractivity.py` in preparation for the new test.

  **_-Before_**
  ```
  ./build/bin/bitcoin-cli -regtest -datadir=/tmp/btc unloadwallet
  error code: -3
  error message:
  JSON value of type number is not of expected type string
  ```
  ```
  ./build/bin/bitcoin-cli -regtest -datadir=/tmp/btc getdescriptoractivity
  error code: -3
  error message:
  JSON value of type null is not of expected type array
  ```
  ```
  ./build/bin/bitcoin-cli -regtest -datadir=/tmp/btc getdescriptoractivity '[]'
  error code: -3
  error message:
  JSON value of type null is not of expected type array
  ```
  **_-After_**
  ```
  ./build/bin/bitcoin-cli -regtest -datadir=/tmp/btc unloadwallet
  error code: -8
  error message:
  Either the RPC endpoint wallet or the wallet name parameter must be provided
  ```
  ```
  ./build/bin/bitcoin-cli -regtest -datadir=/tmp/btc getdescriptoractivity
  error code: -1
  error message:
  getdescriptoractivity ["blockhash",...] [scanobjects,...] ( include_mempool )

  Get spend and receive activity associated with a set of descriptors for a set of blocks. This command pairs well with the `relevant_blocks` output of `scanblocks()`.
  This call may take several minutes. If you encounter timeouts, try specifying no RPC timeout (bitcoin-cli -rpcclienttimeout=0)

  Arguments:
  1. blockhashes                   (json array, required) The list of blockhashes to examine for activity. Order doesn't matter. Must be along main chain or an error is thrown.

       [
         "blockhash",              (string) A valid blockhash
         ...
       ]
  2. scanobjects                   (json array, required) Array of scan objects. Every scan object is either a string descriptor or an object:
       [
         "descriptor",             (string) An output descriptor
         {                         (json object) An object with output descriptor and metadata
           "desc": "str",          (string, required) An output descriptor
           "range": n or [n,n],    (numeric or array, optional, default=1000) The range of HD chain indexes to explore (either end or [begin,end])
         },
         ...
       ]
  3. include_mempool               (boolean, optional, default=true) Whether to include unconfirmed activity

  ...
  ```
  ```
  ./build/bin/bitcoin-cli -regtest -datadir=/tmp/btc getdescriptoractivity '[]'
  error code: -1
  error message:
  getdescriptoractivity ["blockhash",...] [scanobjects,...] ( include_mempool )

  ...
  ```

ACKs for top commit:
  achow101:
    ACK c5c1960f93
  stickies-v:
    re-ACK c5c1960f93
  furszy:
    ACK c5c1960f93

Tree-SHA512: e831ff1acbfd15d2ce3a69bb408cce94664c0b63b2aa2f4627a05c6c052241ae3b5cc238219ef1b30afb489a4a3f4c3030e2168b0c8f08b4d20805d050d810f5
2025-07-25 12:46:13 -07:00
Murch
a3cf623364 test: Test max_selection_weight edge cases
Slays Mutant 37 from Bruno’s report:
https://gist.github.com/brunoerg/834063398d5002f738506d741513e310

diff --git a/src/wallet/coinselection.cpp b/muts/coinselection.mutant.37.cpp
index cee558088f..9747cd26c9 100644
--- a/src/wallet/coinselection.cpp
+++ b/muts/coinselection.mutant.37.cpp
@@ -128,7 +128,7 @@ util::Result<SelectionResult> SelectCoinsBnB(std::vector<OutputGroup>& utxo_pool
             curr_value > selection_target + cost_of_change || // Selected value is out of range, go back and try other branch
             (curr_waste > best_waste && is_feerate_high)) { // Don't select things which we know will be more wasteful if the waste is increasing
             backtrack = true;
-        } else if (curr_selection_weight > max_selection_weight) { // Selected UTXOs weight exceeds the maximum weight allowed, cannot find more solutions by adding more inputs
+        } else if (curr_selection_weight >= max_selection_weight) { // Selected UTXOs weight exceeds the maximum weight allowed, cannot find more solutions by adding more inputs
             max_tx_weight_exceeded = true; // at least one selection attempt exceeded the max weight
             backtrack = true;
         } else if (curr_value >= selection_target) {       // Selected value is within range
2025-07-25 11:08:44 -07:00
Murch
57fe8acc8a test: Check max_weight_exceeded error
This slays the mutants 14 and 39 Bruno reported via
https://gist.github.com/brunoerg/834063398d5002f738506d741513e310,
that changing the intial or subsequent value of
`max_tx_weight_exceeded` in BnB would not fail any tests:

diff --git a/src/wallet/coinselection.cpp b/muts/coinselection.mutant.14.cpp
index cee558088f..947bf7b642 100644
--- a/src/wallet/coinselection.cpp
+++ b/muts/coinselection.mutant.14.cpp
@@ -118,7 +118,7 @@ util::Result<SelectionResult> SelectCoinsBnB(std::vector<OutputGroup>& utxo_pool
     CAmount best_waste = MAX_MONEY;

     bool is_feerate_high = utxo_pool.at(0).fee > utxo_pool.at(0).long_term_fee;
-    bool max_tx_weight_exceeded = false;
+    bool max_tx_weight_exceeded = true;

     // Depth First search loop for choosing the UTXOs
     for (size_t curr_try = 0, utxo_pool_index = 0; curr_try < TOTAL_TRIES; ++curr_try, ++utxo_pool_index) {

diff --git a/src/wallet/coinselection.cpp b/muts/coinselection.mutant.39.cpp
index cee558088f..bbfdc23889 100644
--- a/src/wallet/coinselection.cpp
+++ b/muts/coinselection.mutant.39.cpp
@@ -129,7 +129,7 @@ util::Result<SelectionResult> SelectCoinsBnB(std::vector<OutputGroup>& utxo_pool
             (curr_waste > best_waste && is_feerate_high)) { // Don't select things which we know will be more wasteful if the waste is increasing
             backtrack = true;
         } else if (curr_selection_weight > max_selection_weight) { // Selected UTXOs weight exceeds the maximum weight allowed, cannot find more solutions by adding more inputs
-            max_tx_weight_exceeded = true; // at least one selection attempt exceeded the max weight
+            max_tx_weight_exceeded = false; // at least one selection attempt exceeded the max weight
             backtrack = true;
         } else if (curr_value >= selection_target) {       // Selected value is within range
             curr_waste += (curr_value - selection_target); // This is the excess value which is added to the waste for the below comparison
2025-07-25 11:08:06 -07:00
Sebastian Falbesoner
e3ba0757a9 rpc, wallet: replace remaining hardcoded output types with FormatAllOutputTypes
This commit takes use of the `FormatAllOutputTypes` helper
(introduced in PR #32432, commit 8cc9845b8d)
to get rid of the hardcoded output types in wallet RPC documentation.
Note that it can't be used in the `createmultisig` RPC, as this one is
only for pre-taproot output types and hence doesn't contain "bech32m" in the list.
2025-07-25 18:49:54 +02:00
merge-script
fc162299f0 Merge bitcoin/bitcoin#32994: p2p: rename GetAddresses -> GetAddressesUnsafe
1cb2399703 doc: clarify the GetAddresses/GetAddressesUnsafe documentation (Daniela Brozzoni)
e5a7dfd79f p2p: rename GetAddresses -> GetAddressesUnsafe (Daniela Brozzoni)

Pull request description:

  Rename GetAddresses to GetAddressesUnsafe to make it clearer that this function should only be used in trusted contexts. This helps avoid accidental privacy leaks by preventing the uncached version from being used in non-trusted scenarios, like P2P.

  Additionally, better reflect in the documentation that the two methods should be used in different contexts.
  Also update the outdated "call the function without a parameter" phrasing in the cached version. This wording was accurate when the cache was introduced in #18991, but became outdated after later commits (f26502e9fc, 81b00f8780) added parameters to each
  function, and the previous commit changed the function naming completely.

ACKs for top commit:
  stickies-v:
    re-ACK 1cb2399703
  l0rinc:
    ACK 1cb2399703
  luisschwab:
    ACK 1cb2399703
  brunoerg:
    ACK 1cb2399703
  theStack:
    Code-review ACK 1cb2399703
  mzumsande:
    Code review ACK 1cb2399703

Tree-SHA512: 02c05d88436abcdfabad994f47ec5144e9ba47668667a2c1818f57bf8710727505faf8426fd0672c63de14fcf20b96f17cea2acc39fe3c1f56abbc2b1a9e9c23
2025-07-25 16:15:50 +01:00
merge-script
633d8ea17b Merge bitcoin/bitcoin#32970: ci: Enable more shellcheck
fa1fd07468 ci: Enable more shellcheck (MarcoFalke)

Pull request description:

  shellcheck is often the main "reviewer" of CI code written in Bash, so it seems odd to disable it by putting commands into `bash -c "cmd..."`.

  Fix that by removing `bash -c`, where it isn't intended and where the removal is easily possible.

ACKs for top commit:
  hebasto:
    ACK fa1fd07468.

Tree-SHA512: 6412dd3f8d702bca7762a8f1be3f9d2782132936fcc7ae5c31690b594e04f69708110e6f6233d5a61901289d13c7089ab5646a2c3ef2266fffc36d0543f4b7ae
2025-07-25 15:35:47 +01:00
MarcoFalke
faa1c3e80d Revert "Merge bitcoin/bitcoin#32343: common: Close non-std fds before exec in RunCommandJSON"
This reverts commit 31d3eebfb9, reversing
changes made to 4b26ca0e2f.
2025-07-25 15:30:42 +02:00
merge-script
6cdc5a90cf Merge bitcoin/bitcoin#32967: log: [refactor] Use info level for init logs
face8123fd log: [refactor] Use info level for init logs (MarcoFalke)
fa183761cb log: Remove function name from init logs (MarcoFalke)

Pull request description:

  Many of the normal, and expected init logs, which are run once after startup use the deprecated alias of `LogInfo`.

  Fix that by using `LogInfo` directly, which is a refactor, except for a few log lines that also have `__func__` removed.

  (Also remove the unused trailing `\n` char while touching those logs)

ACKs for top commit:
  stickies-v:
    re-ACK face8123fd
  fanquake:
    ACK face8123fd

Tree-SHA512: 28c296129c9a31dff04f529c53db75057eae8a73fc7419e2f3068963dbb7b7fb9a457b2653f9120361fdb06ac97d1ee2be815c09ac659780dff01d7cd29f8480
2025-07-25 12:04:44 +01:00
merge-script
443c32a3e6 Merge bitcoin/bitcoin#32822: fuzz: Make process_message(s) more deterministic
fa1a14a13a fuzz: Reset chainman state in process_message(s) targets (MarcoFalke)
fa9a3de09b fuzz: DisableNextWrite (MarcoFalke)
aeeeeec9f7 fuzz: Reset dirty connman state in process_message(s) targets (MarcoFalke)
fa11eea405 fuzz: Avoid non-determinism in process_message(s) target (PeerMan) (MarcoFalke)

Pull request description:

  `process_message(s)` are the least stable fuzz targets, according to OSS-Fuzz.

  Tracking issue: https://github.com/bitcoin/bitcoin/issues/29018.

  ### Testing

  Needs coverage compilation, as explained in `./contrib/devtools/README.md`. And then, using 32 threads:

  ```
  cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- $PWD/bld-cmake/ $PWD/../b-c-qa-assets/fuzz_corpora/ process_messages 32
  ```

  Each commit can be reverted to see more non-determinism re-appear.

ACKs for top commit:
  marcofleon:
    ReACK fa1a14a13a
  dergoegge:
    reACK fa1a14a13a

Tree-SHA512: 37b5b6dbdde6a39b4f83dc31e92cffb4a62a4b8f5befbf17029d943d0b2fd506f4a0833570dcdbf79a90b42af9caca44e98e838b03213d6bc1c3ecb70a6bb135
2025-07-25 10:15:07 +01:00
MarcoFalke
face8123fd log: [refactor] Use info level for init logs
This refactor does not change behavior.
2025-07-25 09:50:50 +02:00
MarcoFalke
fa183761cb log: Remove function name from init logs
It is redundant with -logsourcelocations and the log messages are
clearer without it.

Also, remove a double-space.

Also, add braces around `if` touched in the next commit.

This tiny behavior change requires a test fixup.
2025-07-25 09:50:24 +02:00
merge-script
5ad79b2035 Merge bitcoin/bitcoin#32593: wallet, rpc: Move (Un)LockCoin WalletBatch creation out of RPC
6135e0553e wallet, rpc: Move (Un)LockCoin WalletBatch creation out of RPC (Ava Chow)

Pull request description:

  If the locked coin needs to be persisted to the wallet database, insteead of having the RPC figure out when to create a WalletBatch and having LockCoin's behavior depend on it, have LockCoin take whether to persist as a parameter so it makes the batch.

  Since unlocking a persisted locked coin requires a database write as well, we need to track whether the locked coin was persisted to the wallet database so that it can erase the locked coin when necessary.

  Keeping track of whether a locked coin was persisted is also useful information for future PRs.

  Split from #32489

ACKs for top commit:
  rkrux:
    ACK 6135e05
  Sjors:
    ACK 6135e0553e
  w0xlt:
    ACK 6135e0553e

Tree-SHA512: 0e2367fc4d50c62ec41443374b64c4c5ecf679998677df47fb8776cfb44704713bc45547e32e96cd30d1dbed766f5d333efb6f10eb0e71271606638e07e61a01
2025-07-24 13:38:58 -04:00
glozow
ea17a9423f [doc] release note for relaxing requirement of all unconfirmed parents present 2025-07-24 09:44:49 -04:00
Greg Sanders
12f48d5ed3 test: add chained 1p1c propagation test 2025-07-24 09:44:49 -04:00
glozow
525be56741 [unit test] package submission 2p1c with 1 parent missing 2025-07-24 09:44:49 -04:00
glozow
f24771af05 relax child-with-unconfirmed-parents rule
This rule was originally introduced along with a very early proposal for
package relay as a way to verify that the "correct"
child-with-unconfirmed-parents package was provided for a transaction,
where correctness was defined as all of the transactions unconfirmed
parents. However, we are not planning to introduce a protocol where
peers would be asked to send these packages.

This rule has downsides: if a transaction has multiple parents but only
1 that requires package CPFP to be accepted, the current rule prevents
us from accepting that package. Even if the other parents are already in
mempool, the p2p logic will only submit the 1p1c package, which fails
this check. See the test in p2p_1p1c_network.py
2025-07-24 09:44:48 -04:00
merge-script
e17fb86382 Merge bitcoin/bitcoin#32888: ci: Use optimized Debug build type in test-each-commit
faa3171ff2 ci: Use optimized Debug build type in test-each-commit (MarcoFalke)
fa21c3401e ci: [doc] reword debug log message (MarcoFalke)

Pull request description:

  An optimized debug build is mostly as fast as a release build, because hot loops of heavy debug-only code are rare. So use that setting in the test-each-commit CI, to enable more checks almost "for free".

ACKs for top commit:
  Prabhat1308:
    re-ACK [`faa3171`](faa3171ff2)
  willcl-ark:
    crACK faa3171ff2

Tree-SHA512: ca041cf7f79d7abb6f93e17b58b2aea730f3bb9fc51256c1ca1b9f7ce7e7188d18fd99d3754cdbe3f504f4e08d560e72d4b7a75409c214ee2c3771c9a8ba7f96
2025-07-24 12:45:05 +01:00
merge-script
fd3d80c209 Merge bitcoin/bitcoin#33047: test: check proper OP_2ROT behavior
b94c6356a2 test: check proper OP_2ROT behavior (brunoerg)

Pull request description:

  According to corecheck, the following mutant is not caught by any test (https://corecheck.dev/mutation/src/script/interpreter.cpp).

  ```diff
  diff --git a/src/script/interpreter.cpp b/src/script/interpreter.cpp
  index 61ea7f4503..4f6fa34836 100644
  --- a/src/script/interpreter.cpp
  +++ b/src/script/interpreter.cpp
  @@ -746,7 +746,6 @@ bool EvalScript(std::vector<std::vector<unsigned char> >& stack, const CScript&
                           return set_error(serror, SCRIPT_ERR_INVALID_STACK_OPERATION);
                       valtype vch1 = stacktop(-6);
                       valtype vch2 = stacktop(-5);
  -                    stack.erase(stack.end()-6, stack.end()-4);
                       stack.push_back(vch1);
                       stack.push_back(vch2);
                   }
  ```

  It means we're not testing the behavior of the OP_2ROT opcode properly. The normal behavior is: `[1, 2, 3, 4, 5, 6] → OP_2ROT → [3, 4, 5, 6, 1, 2]` (6 elements). However, by deleting the `erase`, it becomes: `[1, 2, 3, 4, 5, 6] → OP_2ROT → [1, 2, 3, 4, 5, 6, 1, 2] (8 elements)` which is obviously wrong. In `script_tests.json`, we have some test cases that includes the OP_2ROT which correctly tests the move part of 2ROT but not the erase one. See:

  ```
  ["25 24 23 22 21 20", "2ROT 24 EQUAL", "P2SH,STRICTENC", "OK"],
  ["25 24 23 22 21 20", "2ROT DROP 25 EQUAL", "P2SH,STRICTENC", "OK"],
  ["25 24 23 22 21 20", "2ROT 2DROP 20 EQUAL", "P2SH,STRICTENC", "OK"],
  ["25 24 23 22 21 20", "2ROT 2DROP DROP 21 EQUAL", "P2SH,STRICTENC", "OK"],
  ["25 24 23 22 21 20", "2ROT 2DROP 2DROP 22 EQUAL", "P2SH,STRICTENC", "OK"],
  ["25 24 23 22 21 20", "2ROT 2DROP 2DROP DROP 23 EQUAL", "P2SH,STRICTENC", "OK"],
  ["25 24 23 22 21 20", "2ROT 2ROT 22 EQUAL", "P2SH,STRICTENC", "OK"],
  ["25 24 23 22 21 20", "2ROT 2ROT 2ROT 20 EQUAL", "P2SH,STRICTENC", "OK"],
  ```

  That said, this PR adds one more test case to the case mentioned.

ACKs for top commit:
  maflcko:
    lgtm ACK b94c6356a2
  l0rinc:
    ACK b94c6356a2
  w0xlt:
    ACK b94c6356a2

Tree-SHA512: 077d83faedcf444b9489928e1601c96bee91ee5c793a494e7e6fa34eabd216ab8706b5fed3d979fba910bd39f3f917c8562380e79cd35d6b7487ad68ca409d5f
2025-07-24 12:24:19 +01:00
merge-script
1119ac51f0 Merge bitcoin/bitcoin#33040: doc: update headers and remove manual TOCs
ca38cf701d doc: fix a few obvious typos in the affected files (Lőrinc)
ddab466e0d doc: remove manual TOCs (Lőrinc)
26a3730711 doc: unify `developer-notes` and `productivity` header styles (Lőrinc)

Pull request description:

  The table of contents of our markdown documents weren't always adjusted when corresponding entries were added/removed e.g.
  * `Ignoring IDE/editor files`: faf65f0531 (diff-5e319039d67254bed6ca82562ec5f560f102004aa4806e4ca77f5d0065c65fbbL788-L802)
  * `Shebang`: 7777fb8bc7 (diff-5e319039d67254bed6ca82562ec5f560f102004aa4806e4ca77f5d0065c65fbbL1128-L1144)
  * `Wallet`: fa69c5b170 (diff-5e319039d67254bed6ca82562ec5f560f102004aa4806e4ca77f5d0065c65fbbL882-L885)
  * `Fetch and update PRs individually` 45b1d39757 (diff-fb3fb3681e7dbfc61c47a7d1f890941b8c886cd46fc06cf7839a03a68dc2aa02R188-R200)
  * `External libmultiprocess installation` 9ccee9cd02 (diff-41e578ab9c8df11d4143597ad73dbe7be92dba4521a5d17c074b79aad1776ee4R38-R40)

  Since GitHub generates these automatically, it suffices if we unify the header styles instead and delete the manual TOC sections.

ACKs for top commit:
  maflcko:
    lgtm ACK ca38cf701d 🌔
  janb84:
    ACK ca38cf701d
  yuvicc:
    re-ACK ca38cf701d

Tree-SHA512: a2edcae9a1c4fa9b910dc1cf43f4461f1d79016949b5b4a93fb204ffd735dc2de884785e9796dc084a9852419047a438784a8eec2c38d7e1573a494d81a77494
2025-07-24 12:06:54 +01:00
merge-script
e2f2df0ead Merge bitcoin/bitcoin#32984: wallet: Set migrated wallet name only on success
060695c22a test: Failed load after migrate should restore backup (MarcoFalke)
8a4cfddf23 wallet: Set migrated wallet name only on success (Ava Chow)

Pull request description:

  After a wallet is migrated and we are trying to load it, if it could not be loaded, don't try to set the wallet name. Otherwise we have a segfault.

  This can be tested by migrated a legacy wallet from another network (e.g. trying to migrate a testnet wallet on mainnet). The fixed behavior is return an error and restore the backup.

ACKs for top commit:
  davidgumberg:
    ACK 060695c22a
  furszy:
    ACK 060695c22a
  rkrux:
    ACK 060695c22a
  w0xlt:
    reACK 060695c22a
  pablomartin4btc:
    ACK 060695c22a

Tree-SHA512: f4289e0b3dedef0a3d734c18604f2fd0df0dc65e9641bc342cfa45088d2540a3f6631bbea8bdd394b2631fa83b38e8ac37c83cfc4b53b19dcbd0b820a9beb6e4
2025-07-24 12:00:52 +01:00
merge-script
16f7b43b68 Merge bitcoin/bitcoin#33049: doc: Fix typos in asmap README
b59dc21847 doc: Fix typos in asmap README (nervana21)

Pull request description:

  This minor PR fixes some spelling mistakes found while reviewing #33026.

ACKs for top commit:
  fanquake:
    ACK b59dc21847

Tree-SHA512: e76f7f97c10f3e506d024da0cbf804f4975cf07f31f0dd0abad6fcb97a5fa1032087459dba46de3715f6275d47e2fde4d8db3d38341540110d87fd5669855359
2025-07-24 11:10:23 +01:00
nervana21
b59dc21847 doc: Fix typos in asmap README 2025-07-24 01:24:42 -04:00
Lőrinc
ca38cf701d doc: fix a few obvious typos in the affected files 2025-07-23 22:00:40 -07:00
Lőrinc
ddab466e0d doc: remove manual TOCs 2025-07-23 21:31:35 -07:00
Lőrinc
26a3730711 doc: unify developer-notes and productivity header styles 2025-07-23 21:31:06 -07:00
Ava Chow
eb13718448 Merge bitcoin/bitcoin#31179: RPC: Add reserve member function to UniValue and use it in blockToJSON function
5d82d92aff rpc: reserve space for `UniValue` variables  in `blockToJSON` (ismaelsadeeq)
6a506d5c37 UniValue: add reserve member function (ismaelsadeeq)
bd461195f4 bench: support benching all verbosity of `BlockToJson` (ismaelsadeeq)

Pull request description:

  This PR is motivated by https://github.com/bitcoin/bitcoin/issues/30495#issuecomment-2444881418,
  It adds a `reserve` member function to `UniValue` and applies it within the `blockToJSON` function to pre-allocate memory, minimizing reallocation's.

  <details>
  <summary>Slight performance increase in verbosity 1</summary>

  On **master**:

  |         ns/op |        op/s |  err% | total | benchmark              |
  |--------------:|------------:|------:|------:|:------------------------|
  |      190,342  |     5,254   |  2.3% |  0.01 | `BlockToJsonVerbose1`   |
  |  34,812,292   |       28.73 |  1.0% |  0.38 | `BlockToJsonVerbose2`   |
  |  34,457,167   |       29.02 |  1.0% |  0.38 | `BlockToJsonVerbose3`   |

  On **this PR**:

  |         ns/op |        op/s |  err% | total | benchmark              |
  |--------------:|------------:|------:|------:|:------------------------|
  |      172,278  |     5,805   |  0.7% |  0.01 | `BlockToJsonVerbose1`   |
  |  33,720,584   |       29.66 |  0.4% |  0.37 | `BlockToJsonVerbose2`   |
  |  33,884,417   |       29.51 |  1.2% |  0.38 | `BlockToJsonVerbose3`   |
  </details>

ACKs for top commit:
  maflcko:
    review ACK 5d82d92aff 🐀
  l0rinc:
    ACK 5d82d92aff
  achow101:
    ACK 5d82d92aff
  Eunovo:
    Re-ACK 5d82d92aff

Tree-SHA512: bdd2c1bcdc4d060d30ad3be0b10f0d722dda0c2286bc4156af851503220e8854e76a4dc53456826b543c110982455268838172d3a1026eee754d4c673b48ea05
2025-07-23 13:29:07 -07:00
Lőrinc
86e3a0a8cb refactor: standardize obfuscation memory alignment
See:
* https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2216962117
* https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2220277161
* https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2210851772

Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
2025-07-23 12:56:48 -07:00
Lőrinc
13f00345c0 refactor: write Obfuscation object when new key is generated in dbwrapper
See:
* https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2215720251
* https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2223539466

Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com>
Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
2025-07-23 12:56:15 -07:00
glozow
eb65f57f31 [test] setmocktime instead of waiting in 1p1c tests
Significantly speed up the runtime of the test.
2025-07-23 15:15:06 -04:00
glozow
70772dd469 [test] cut the number of transactions involved in 1p1c DoS tests
We just need enough transactions to push us above the orphanage limits
and trigger trimming. Reducing the number of transactions cuts the
runtime of this test significantly.
2025-07-23 15:14:47 -04:00
brunoerg
b94c6356a2 test: check proper OP_2ROT behavior 2025-07-23 13:52:17 -03:00
merge-script
73e754bd01 Merge bitcoin/bitcoin#33001: test: Do not pass tests on unhandled exceptions
faa3e68411 test: Log KeyboardInterrupt as exception (MarcoFalke)
fa30b34026 test: Do not pass tests on unhandled exceptions (MarcoFalke)

Pull request description:

  Currently the functional tests are problematic, because they pass, even if they encounter an unhanded exception.

  Fix this by handling all exceptions: Catch `BaseException` as fallback and mark it as failure.

  Can be tested via:

  ```diff
  diff --git a/test/functional/wallet_disable.py b/test/functional/wallet_disable.py
  index da6e5d408f..ecc41fb041 100755
  --- a/test/functional/wallet_disable.py
  +++ b/test/functional/wallet_disable.py
  @@ -19,6 +19,7 @@ class DisableWalletTest (BitcoinTestFramework):
           self.wallet_names = []

       def run_test (self):
  +        import sys;sys.exit("fatal error")
           # Make sure wallet is really disabled
           assert_raises_rpc_error(-32601, 'Method not found', self.nodes[0].getwalletinfo)
           x = self.nodes[0].validateaddress('3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy')
  ```

  Previously, the test would pass. With this patch, it would fail.

ACKs for top commit:
  enirox001:
    Looks good to me—ACK faa3e68
  stickies-v:
    re-ACK faa3e68411
  pablomartin4btc:
    tACK faa3e68411

Tree-SHA512: 11ecd5201982e2c776e48d98834b17c15a415306a95524bc702daeba20a316aac797748e9592be8db575597804f149ee7ef104416037cc9e5891758625810e2d
2025-07-23 16:44:41 +01:00
marcofleon
a9819b0e9d refactor: Change FindTxForGetData to take GenTxid instead of CInv
Addresses
https://github.com/bitcoin/bitcoin/pull/32631#discussion_r2200291621
from #32631
2025-07-23 15:01:43 +01:00
marcofleon
d588575ed1 refactor: miscellaneous GenTxid followups
Addresses a few comments from #32631:
https://github.com/bitcoin/bitcoin/pull/32631#discussion_r2199951996
https://github.com/bitcoin/bitcoin/pull/32631#discussion_r2201874252
https://github.com/bitcoin/bitcoin/pull/32631#discussion_r2201918072
2025-07-23 15:01:18 +01:00
merge-script
cfb859e82e Merge bitcoin/bitcoin#33037: doc: Add release notes for 32521 (MAX_TX_LEGACY_SIGOPS)
faa2f3b1af doc: Add release notes for 32521 (MAX_TX_LEGACY_SIGOPS) (MarcoFalke)

Pull request description:

  ref https://github.com/bitcoin/bitcoin/pull/32521

ACKs for top commit:
  Sjors:
    ACK faa2f3b1af

Tree-SHA512: 58694545eca38cd4391d2ce6ddb9f4785c19af3df639da9d17fa1ade5d56369723e0e7fece71b50e2186a65aa55919c8f64ae12833d676e07b448e0cfc53ce3c
2025-07-23 10:50:02 +01:00
merge-script
afd3b34dc5 Merge bitcoin/bitcoin#33004: Enable -natpmp by default
b2d07f872c Add release notes for -natpmp enabled by default (Antoine Poinsot)
3fc660d267 mapport: turn -natpmp to on by default (Antoine Poinsot)

Pull request description:

  This turns the default for NAT hole-punching (with [PCP](https://en.wikipedia.org/wiki/Port_Control_Protocol) or [NAT-PMP](https://en.wikipedia.org/wiki/NAT_Port_Mapping_Protocol)) to on. Closes #31663.

ACKs for top commit:
  ajtowns:
    ACK b2d07f872c

Tree-SHA512: 7449510aa97ce225a662947184046cba6c8f0409719cd0b279639cedd8fdbf55a769a0088e66c7ac5b6ebabec9b2c81141ae14b7a87a5ad13be01d36c4e56661
2025-07-23 09:57:05 +01:00
merge-script
49bbf9ff28 Merge bitcoin/bitcoin#33036: Update secp256k1 subtree to latest master
5600e6fc4b Squashed 'src/secp256k1/' changes from 4187a46649..b9313c6e1a (fanquake)

Pull request description:

  Updates the subtree to b9313c6e1a. See https://github.com/bitcoin-core/secp256k1/blob/master/CHANGELOG.md#070---2025-07-21 for the most relevant changes.

ACKs for top commit:
  theStack:
    ACK 336b8be37b
  stickies-v:
    ACK 336b8be37b

Tree-SHA512: 8494850b979e3d27c98d89f8bac75c8a1180184adf134b1f2ba009bd21877836855f50d074535f06e2e0e62636464eaa926db82f1fb4d5f252a8804d6ba70c87
2025-07-23 09:45:50 +01:00
pablomartin4btc
c5c1960f93 doc: Add release notes for changes in RPCs
Adding notes for both `unloadwallet` and `getdescriptoractivity`.
2025-07-22 23:25:14 -03:00
pablomartin4btc
90fd5acbe5 rpc, test: Fix error message in getdescriptoractivity
Mark blockhashes and scanobjects arguments as required, so the user receives
a clear help message when either is missing.

Added a new functional test for this use case.

Co-authored-by: stickies-v <stickies-v@users.noreply.github.com>
2025-07-22 23:23:23 -03:00
pablomartin4btc
39fef1d203 test: Add missing logging info for each test
Add self.log.info(...) calls at the beginning of each test
in GetBlocksActivityTest.

This improves readability and provides debugging information
by logging the purpose of each test upon its correct
execution.

This is in preparation for the next commit, which adds a new test
with log info, and it would look inconsistent without this commit.
2025-07-22 23:12:10 -03:00
pablomartin4btc
53ac704efd rpc, test: Fix error message in unloadwallet
The unloadwallet RPC previously failed with a low-level JSON parsing error
when called without any arguments (wallet_name).

Although this issue was first identified during review of the original unloadwallet
implementation in #13111, it was never addressed.

Raise RPC_INVALID_PARAMETER instead describing that either the RPC endpoint or wallet
name must be provided.

Adding a new functional test for this use case.

Refactor migratewallet to use the same logic as the wallet_name argument handling
is identical.

Co-authored-by:  maflcko <maflcko@users.noreply.github.com>
2025-07-22 23:12:09 -03:00
pablomartin4btc
1fc3a8e8e7 rpc, test: Add EnsureUniqueWalletName tests
Co-authored-by: stickies-v <stickies-v@users.noreply.github.com>
2025-07-22 23:12:04 -03:00
Ava Chow
900bb53905 Merge bitcoin/bitcoin#32990: wallet: remove outdated pszSkip arg of database Rewrite func
2dfeb6668c wallet: remove outdated `pszSkip` arg of database `Rewrite` func (rkrux)

Pull request description:

  This argument might have been used in the legacy wallets, but I don't see any implementation using this argument in the SQLite wallets. Removing it cleans up the code a bit.

ACKs for top commit:
  achow101:
    ACK 2dfeb6668c
  brunoerg:
    code review ACK 2dfeb6668c

Tree-SHA512: de2178ad6862125f084434ec6a7271d567544870c474c5ea2e75a4f69f3f5eb2170ff46947e098f58e1fa47c35bbe4ebafcd8180581d1f100f1f8d177b32dd91
2025-07-22 16:41:18 -07:00
Ava Chow
c8ec423719 Merge bitcoin/bitcoin#33020: test: delete commented-out tests and add a test case in wallet_signer
da318fe53f test: delete commented out tests (naiyoma)
6d80e999a0 test: external signer returns invalid JSON response (naiyoma)

Pull request description:

  I noticed that some test cases had been commented out in wallet_signer.py.
  This PR uncomments and modifies some of those test cases so that they can pass.

  dac74c6949 -> deleting this assertion since multiple signers is being tested here https://github.com/bitcoin/bitcoin/blob/master/test/functional/wallet_signer.py#L273

  1707c90566 test when  an external signer returns malformed or invalid JSON, which would trigger this error:
  → https://github.com/bitcoin/bitcoin/blob/master/src/common/run_command.cpp#L42

  b96156821e test  importdescriptors with external signer

ACKs for top commit:
  Sjors:
    ACK da318fe53f
  achow101:
    ACK da318fe53f
  theStack:
    ACK da318fe53f

Tree-SHA512: 6416f83abed1923d72a8a83c5937e8f732e02b5396b5bd3fe868d28e8f3cb2bf55f3bcbc2ec8219302b55045fa1d9e7ce119b4e8bdea2df2103fede9f109eacf
2025-07-22 15:48:59 -07:00
Ava Chow
09f004bd9f Merge bitcoin/bitcoin#32945: tests: speed up coins_tests by parallelizing
06ab3a394a tests: speed up coins_tests by parallelizing (Anthony Towns)

Pull request description:

  Updates the cmake logic to generate a separate test for each BOOST_FIXTURE_TEST_SUITE declaration in a file, and splits coins_tests.cpp into three separate suites so that they can be run in parallel. Also updates the convention enforced by test/lint/lint-tests.py.

ACKs for top commit:
  l0rinc:
    reACK 06ab3a394a
  maflcko:
    lgtm ACK 06ab3a394a
  achow101:
    ACK 06ab3a394a

Tree-SHA512: 940d9aa31dab60d1000b5f57d8dc4b2c5b4045c7e5c979ac407aba39f2285d53bc00c5e4d7bf2247551fd7e1c8681144e11fc8c005a874282c4c59bd362fb467
2025-07-22 11:19:18 -07:00
Ava Chow
5d98fc7559 Merge bitcoin/bitcoin#33030: test: check tx is final when there is no locktime
065e42976a test: IsFinalTx returns true when there is no locktime (brunoerg)

Pull request description:

  According to https://corecheck.dev/mutation/src/consensus/tx_verify.cpp, there is no proper test for the `tx.nLockTime == 0` check in the `IsFinalTx` function, which is understandable, since this check will only be useful for a specific case where the `nBlockHeight` (block height) is zero. Otherwise, the following check `if ((int64_t)tx.nLockTime < ((int64_t)tx.nLockTime < LOCKTIME_THRESHOLD ? (int64_t)nBlockHeight : nBlockTime))` would catch any of it. This PR adds a test case for it.

ACKs for top commit:
  maflcko:
    lgtm ACK 065e42976a
  enirox001:
    ACK 065e429: Valuable test case that explicitly demonstrates `IsFinalTx` behavior when nLockTime is 0
  achow101:
    ACK 065e42976a
  darosior:
    utACK 065e42976a

Tree-SHA512: e44a7c060bd4c3d746fab166442cadc3fd449ddd8b02cabf22024a5dde6f438f24c6e1bff2a6dc49b57c8e01234aa0fd393fbfe6194df9d9b6c3d4fa2655c99b
2025-07-22 11:07:45 -07:00
Lőrinc
e5b1b7c557 refactor: rename OBFUSCATION_KEY_KEY
See: https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2216425882

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
2025-07-22 10:26:15 -07:00
Lőrinc
298bf95105 refactor: simplify Obfuscation::HexKey
See: https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2215746554

Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com>
2025-07-22 10:26:15 -07:00
Lőrinc
2dea045425 test: make obfuscation_serialize more thorough
See: https://github.com/bitcoin/bitcoin/pull/31144#discussion_r2216849672

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
2025-07-22 10:26:15 -07:00