45625 Commits

Author SHA1 Message Date
merge-script
fb2c16cf7b
Merge bitcoin/bitcoin#32826: p2p: add more bad ports
6967e8e8abbc35ac98e8e3745a8bbed56e77526f add more bad p2p ports (Jameson Lopp)

Pull request description:

  Add a few more ports used by extremely well adopted services that require authentication and really ought not be used by bitcoin nodes for p2p traffic.

ACKs for top commit:
  Sjors:
    utACK 6967e8e8abbc35ac98e8e3745a8bbed56e77526f
  l0rinc:
    ACK 6967e8e8abbc35ac98e8e3745a8bbed56e77526f
  glozow:
    ACK 6967e8e8abbc35ac98e8e3745a8bbed56e77526f

Tree-SHA512: bbe86aef2be9727338712ded8f90227f5d12f633ab5d324c8907c01173945d1c4d9899e05565f78688842bbf5ebb010d22173969e4168ea08d4e33f01fe9569d
2025-06-30 13:28:17 -04:00
merge-script
f5f3e1f263
Merge bitcoin/bitcoin#32646: p2p: Add witness mutation check inside FillBlock
28299ce77636d7563ec545d043cf1b61bd2f01c1 p2p: remove vestigial READ_STATUS_CHECKBLOCK_FAILED (Greg Sanders)
bac9ee4830664c86c1cb3d38a5b19c722aae2f54 p2p: Add witness mutation check inside FillBlock (Greg Sanders)

Pull request description:

  Since #29412, we have not allowed mutated blocks to continue being processed immediately the block is received, but this is only done for the legacy BLOCK message.

  Extend these checks as belt-and-suspenders to not allow similar mutation strategies to affect relay by honest peers by applying the check inside `PartiallyDownloadedBlock::FillBlock`, immediately before returning `READ_STATUS_OK`.

ACKs for top commit:
  Crypt-iQ:
    ACK 28299ce77636d7563ec545d043cf1b61bd2f01c1
  achow101:
    ACK 28299ce77636d7563ec545d043cf1b61bd2f01c1
  stratospher:
    ACK 28299ce7.
  dergoegge:
    Code review ACK 28299ce77636d7563ec545d043cf1b61bd2f01c1

Tree-SHA512: 883d7c12ca096234b425e6fe12e46b0611607600916e6ac8d1c8112224aa76924b7b074754910163ac2ec15379075d618a9ece3642649ac7629cddb0d4e432ea
2025-06-30 13:15:37 -04:00
merge-script
a763497b1d
Merge bitcoin/bitcoin#32834: test: Use msg_generic in p2p_ping.py
fa3f100010f1a0273891ed0d14ddb3c5ccacbd4b test: Use msg_generic in p2p_ping.py (MarcoFalke)

Pull request description:

  It seems odd to derive `msg_pong_corrupt` from `msg_pong`, but then overwrite the serialize method, when one can just directly use `msg_generic` to pass the raw bytes to send over the wire.

  Fix that by using `msg_generic`. This also serves as a regression test against the fix in commit 33480573cbd8d03aefbde100e51f827a2f7de7f7.

  (Can be tested by reverting that commit to observe a failure)

ACKs for top commit:
  dergoegge:
    utACK fa3f100010f1a0273891ed0d14ddb3c5ccacbd4b
  theStack:
    ACK fa3f100010f1a0273891ed0d14ddb3c5ccacbd4b

Tree-SHA512: 53d7d2289f27646fdf7d3b86c53e8e707fa4ca4b006d232850f9dc27409d79b7abe1dece95ccef429d4b52c6a89579c0cc5c0ee37046375c3c0310a2d6f9ddd5
2025-06-30 14:41:21 +01:00
MarcoFalke
fa3f100010
test: Use msg_generic in p2p_ping.py 2025-06-30 14:50:55 +02:00
merge-script
33480573cb
Merge bitcoin/bitcoin#32833: test: Add msgtype to msg_generic slots
7dc43ea503a2c145ffd4fe14b794300bfc2bcdee test: Add msgtype to msg_generic slots (dergoegge)

Pull request description:

  `msg_generic` can't be used unless `msgtype` is listed in `__slots__`

  Example from a [custom test](6329ce979f/test/functional/p2p_bug28676.py):

  ```
  2025-06-30T10:14:55.418000Z TestFramework (INFO): PRNG seed is: 3137163719543762151
  2025-06-30T10:14:55.418000Z TestFramework (INFO): Initializing test directory /tmp/nix-shell-110135-0/bitcoin_func_test_7lmiemmp
  2025-06-30T10:14:55.675000Z TestFramework (INFO): Setting up connections & mining some blocks...
  2025-06-30T10:14:56.511000Z TestFramework (ERROR): Unexpected exception caught during testing
  Traceback (most recent call last):
    File "/home/dergoegge/workspace/bitcoin/worktrees/master/test/functional/test_framework/test_framework.py", line 189, in main
      self.run_test()
    File "/home/dergoegge/workspace/bitcoin/worktrees/master/./build/test/functional/p2p_bug28676.py", line 46, in run_test
      self.connections[0].send_without_ping(msg_generic(b"block", bytes.fromhex("0500000006226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f06b816712ffab8c59299a6abb58ccefa1995a1368ca4348782ef268cbc9bacacdbe5494dffff7f200200000001010000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff075105ffffffff00ffffffff0200f90295000000002200204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc332600000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000")))
    File "/home/dergoegge/workspace/bitcoin/worktrees/master/test/functional/test_framework/messages.py", line 1386, in __init__
      self.msgtype = msgtype
  AttributeError: 'msg_generic' object has no attribute 'msgtype'
  ```

ACKs for top commit:
  maflcko:
    lgtm ACK 7dc43ea503a2c145ffd4fe14b794300bfc2bcdee
  theStack:
    ACK 7dc43ea503a2c145ffd4fe14b794300bfc2bcdee

Tree-SHA512: 8c634d50a884b063117e8ae29510ffd013e73dda9f8b0f73d098e80038b610ef8d80bd2e576c37f0cedfb4b6baa3d4ebeceb0902f29f90d59e1525f418f712fe
2025-06-30 13:27:55 +01:00
merge-script
9501738e1c
Merge bitcoin/bitcoin#32825: rest: rename strURIPart to uri_part
856f4235b1ae56540e1d2279c27405d44a5c7b34 scripted-diff: rest: rename `strURIPart` -> `uri_part` (Roman Zeyde)

Pull request description:

  Following https://github.com/bitcoin/bitcoin/pull/32540#discussion_r2172902737.

ACKs for top commit:
  l0rinc:
    reACK 856f4235b1ae56540e1d2279c27405d44a5c7b34
  maflcko:
    lgtm ACK 856f4235b1ae56540e1d2279c27405d44a5c7b34

Tree-SHA512: a56a66872e632eed65fe1f75b9873dcf1d713cf09eba6e1e4031c58d88a5427a5bb7e49be4951ba22dfe4c9b558bb86f0f071fa42fc9cb50689564fe0b3b0297
2025-06-30 13:20:52 +01:00
Hennadii Stepanov
5a5ddbd789
build: Add workaround for NetBSD bug in Boost::headers target
Due to a bug in `boost_headers-config.cmake`, the `Boost::headers`
target's `INTERFACE_INCLUDE_DIRECTORIES` property is set to "/usr",
which is incorrect.
2025-06-30 11:34:29 +01:00
Jameson Lopp
6967e8e8ab
add more bad p2p ports 2025-06-30 06:24:00 -04:00
dergoegge
7dc43ea503 test: Add msgtype to msg_generic slots 2025-06-30 11:13:11 +01:00
Hennadii Stepanov
4eb3cee919
doc: Update NetBSD Build Guide
The `boost-headers` package does not provide CMake configuration files
required since https://github.com/bitcoin/bitcoin/pull/32667. Install
the `boost` package instead.
2025-06-29 20:04:49 +01:00
Roman Zeyde
856f4235b1
scripted-diff: rest: rename strURIPart -> uri_part
Following https://github.com/bitcoin/bitcoin/pull/32540#discussion_r2172902737.

-BEGIN VERIFY SCRIPT-
sed -i 's/\<strURIPart\>/uri_part/g' src/rest.cpp
-END VERIFY SCRIPT-
2025-06-28 14:59:08 +03:00
Ava Chow
b3bb4031ab
Merge bitcoin/bitcoin#32540: rest: fetch spent transaction outputs by blockhash
c48846ec4169f749d28da05de849c43a488c3a70 doc: add release notes for #32540 (Roman Zeyde)
d4e212e8a69ea118acb6caa1a7efe64a77bdfdd2 rest: fetch spent transaction outputs by blockhash (Roman Zeyde)

Pull request description:

  Today, it is possible to fetch a block's spent prevouts in order to build an external index by using the `/rest/block/BLOCKHASH.json` endpoint. However, its performance is low due to JSON serialization overhead.

  We can significantly optimize it by adding a new [REST API](https://github.com/bitcoin/bitcoin/blob/master/doc/REST-interface.md) endpoint, using a binary response format (returning a collection of spent txout lists, one per each block transaction):

  ```
  $ BLOCKHASH=00000000000000000002a7c4c1e48d76c5a37902165a270156b7a8d72728a054

  $ ab -k -c 1 -n 100 http://localhost:8332/rest/block/$BLOCKHASH.json
  Document Length:        13278152 bytes
  Requests per second:    3.53 [#/sec] (mean)
  Time per request:       283.569 [ms] (mean)

  $ ab -k -c 1 -n 10000 http://localhost:8332/rest/spenttxouts/$BLOCKHASH.bin
  Document Length:        195591 bytes
  Requests per second:    254.47 [#/sec] (mean)
  Time per request:       3.930 [ms] (mean)
  ```

  Currently, this PR is being used and tested by Bindex[^1].

  This PR would allow to improve the performance of external indexers such as electrs[^2], ElectrumX[^3], Fulcrum[^4] and Blockbook[^5].

  [^1]: https://github.com/romanz/bindex-rs
  [^2]: https://github.com/romanz/electrs (also [blockstream.info](https://github.com/Blockstream/electrs) and [mempool.space](https://github.com/mempool/electrs) forks)
  [^3]: https://github.com/spesmilo/electrumx
  [^4]: https://github.com/cculianu/Fulcrum
  [^5]: https://github.com/trezor/blockbook

ACKs for top commit:
  maflcko:
    re-ACK c48846ec4169f749d28da05de849c43a488c3a70 📶
  TheCharlatan:
    Re-ACK c48846ec4169f749d28da05de849c43a488c3a70
  achow101:
    ACK c48846ec4169f749d28da05de849c43a488c3a70

Tree-SHA512: cf423541be90d6615289760494ae849b7239b69427036db6cc528ac81df10900f514471d81a460125522c5ffa31e9747ddfca187a1f93151e4ae77fe773c6b7b
2025-06-27 14:44:41 -07:00
Ava Chow
3086c21df4
Merge bitcoin/bitcoin#32243: test: added fuzz coverage for consensus/merkle.cpp
95969bc58ae0cd928e536d7cb8541de93e8c7205 test: added fuzz coverage to consensus/merkle.cpp (kevkevinpal)

Pull request description:

  ### Summary
  This adds a new fuzz target "merkle" which adds fuzz coverage to `consensus/merkle.cpp`

  I can also add this to an existing fuzz target if that is preferable

  Before:
  ![Screenshot 2025-04-09 at 10 12 54 PM](https://github.com/user-attachments/assets/e5f8da56-4583-441d-b08f-dfcc255ff248)

  After:
  ![Screenshot 2025-04-11 at 4 20 41 PM](https://github.com/user-attachments/assets/849ee079-b715-4089-9e36-d156233236c6)

ACKs for top commit:
  marcofleon:
    ReACK 95969bc58ae0cd928e536d7cb8541de93e8c7205
  Prabhat1308:
    ACK [`95969bc`](95969bc58a)
  maflcko:
    lgtm ACK 95969bc58ae0cd928e536d7cb8541de93e8c7205
  achow101:
    ACK 95969bc58ae0cd928e536d7cb8541de93e8c7205

Tree-SHA512: e1fe8b69444733516bfa6cf2adaa199fde4c7c5582b7b908408f9313ed0f2e8cb803d27d707a1716d49606d5eaef8c1e722990bbc3cffc30fa91fe73d2233e9d
2025-06-27 13:34:30 -07:00
Ava Chow
319ff58bbd
Merge bitcoin/bitcoin#32638: blocks: force hash validations on disk read
9341b5333ad54ccdb7c16802ff06c51b956948e7 blockstorage: make block read hash checks explicit (Lőrinc)
2371b9f4ee0b108ebbb8afedc47d73ce0f97d272 test/bench: verify hash in `ComputeFilter` reads (Lőrinc)
5d235d50d6dd0cc23175a1484e8ebb6cdc6e2183 net: assert block hash in `ProcessGetBlockData` and `ProcessMessage` (Lőrinc)

Pull request description:

  A follow-up to https://github.com/bitcoin/bitcoin/pull/32487#discussion_r2094072165, after which validating the hash of a read block from disk doesn't incur the cost of calculating its hash anymore.

  ### Summary

  This PR adds explicit checks that the read block header's hash matches the one we were expecting.

  ### Context

  After the previous PR, validating a block's hash during read operations became essentially free. This PR leverages that by requiring callers to provide a block's expected hash (or `std::nullopt`), preventing silent failures caused by corrupted or mismatched data. Most `ReadBlock` usages were updated with expected hashes and now fail on mismatch.

  ### Changes

  * added hash assertions in `ProcessGetBlockData` and `ProcessMessage` to validate that the block read from disk matches the expected hash;
  * updated tests and benchmark to pass the correct block hash to `ReadBlock()`, ensuring the hash validation is tested - or none if we already expect PoW failure;
  * removed the default value for `expected_hash`, requiring an explicit hash for all block reads.

  ### Why is the hash still optional (but no longer has a default value)

  * for header-error tests, where the goal is to trigger failures early in the parsing process;
  * for out-of-order orphan blocks, where the child hash isn't available before the initial disk read.

ACKs for top commit:
  maflcko:
    review ACK 9341b5333ad54ccdb7c16802ff06c51b956948e7 🕙
  achow101:
    ACK 9341b5333ad54ccdb7c16802ff06c51b956948e7
  hodlinator:
    ACK 9341b5333ad54ccdb7c16802ff06c51b956948e7
  janb84:
    re ACK 9341b5333ad54ccdb7c16802ff06c51b956948e7

Tree-SHA512: cf1d4fff4c15e3f8898ec284929cb83d7e747125d4ee759e77d369f1716728e843ef98030be32c8d608956a96ae2fbefa0e801200c333b9eefd6c086ec032e1f
2025-06-27 13:28:26 -07:00
pablomartin4btc
ec004cdb86 test: Use rehash() in outbound eviction block-relay
Ensure that tip_header.rehash() is used instead of tip_header.hash, which is None when the header is deserialized from hex.

This avoids depending on wait_for_getheaders() falling back to any received message, making the test more explicit and robust.
2025-06-27 13:54:01 -03:00
pablomartin4btc
26598ed21e test: Clarify roles in outbound eviction comments
Some ambiguous uses of "we" referring to either the node or the peer are replaced with clearer phrasing.

Also rephrase some comments for consistency and readability.

Applies to all relevant outbound eviction tests in p2p_eviction_logic.py.
2025-06-27 13:41:06 -03:00
merge-script
689318ccd9
Merge bitcoin/bitcoin#32667: build: Find Boost in config mode
14653b869b91f8013656099c9eb23b3518b8e53e build: Find Boost in config mode (Hennadii Stepanov)

Pull request description:

  The `FindBoost` module has been removed by policy [CMP0167](https://cmake.org/cmake/help/latest/policy/CMP0167.html).

ACKs for top commit:
  purpleKarrot:
    ACK 14653b869b91f8013656099c9eb23b3518b8e53e

Tree-SHA512: 5ec88647af83158f9bc04b41a3b72d4da7d84a7c81af351b8dac61cdf7f2f3b34bedd6ff164f21c229f2fd442918aaf21ba7c2c81c346b64de9032aae27b10ce
2025-06-27 14:54:54 +01:00
merge-script
4a3475a43e
Merge bitcoin/bitcoin#32819: Add release note for #32530
558f0880a8f374ab7a06bd829635a5e188bd8419 Add release note for #32530 (Antoine Poinsot)

Pull request description:

ACKs for top commit:
  fanquake:
    ACK 558f0880a8f374ab7a06bd829635a5e188bd8419

Tree-SHA512: 018e02d8f49a23f29d1d2ec38200ae1af9138727da3823c8afad62244c16e0076eef80bbf7ad3d3d73d553de3870bafbe9c35485cbac8d794ab7be320bbee09e
2025-06-27 12:07:36 +01:00
Antoine Poinsot
558f0880a8 Add release note for #32530 2025-06-26 12:40:26 -04:00
merge-script
c43cc48aaa
Merge bitcoin/bitcoin#32530: node: cap -maxmempool and -dbcache values for 32-bit
9f8e7b0b3b787b873045a4a8194e77d0b0a2b3b6 node: cap -dbcache to 1GiB on 32-bit architectures (Antoine Poinsot)
2c43b6adebbfabb3c8dd82fe821ce0a5d6173b3b init: cap -maxmempool to 500 MB on 32-bit systems (Antoine Poinsot)

Pull request description:

  32-bit architecture is limited to 4GiB of RAM, so it doesn't make sense to set a too high value. A too high value could cause an OOM unbeknownst to the user a while after startup as mempool / dbcache fills.

ACKs for top commit:
  achow101:
    ACK 9f8e7b0b3b787b873045a4a8194e77d0b0a2b3b6
  instagibbs:
    utACK 9f8e7b0b3b787b873045a4a8194e77d0b0a2b3b6
  dergoegge:
    Code review ACK 9f8e7b0b3b787b873045a4a8194e77d0b0a2b3b6
  glozow:
    utACK 9f8e7b0b3b787b873045a4a8194e77d0b0a2b3b6

Tree-SHA512: cc7541b2c0040fc21a43916caec464dfb443af808f4e85deffa1187448ffff6edb0d69f9ebdb43915d145b8b4694d8465afe548f88da53ccebc9ce4b7c34b735
2025-06-26 17:33:23 +01:00
merge-script
4145a9463a
Merge bitcoin/bitcoin#32731: depends: Build qt package for FreeBSD hosts
173394d9511ed091e73eb12cb28f819026c09576 depends: Build `qt` package for FreeBSD hosts (Hennadii Stepanov)

Pull request description:

  This PR continues the work started in https://github.com/bitcoin/bitcoin/pull/23948.

  Here is an excerpt from the log:
  ```
  $ ./build/bin/bitcoin-qt -printtoconsole
  2025-06-12T01:06:56Z Bitcoin Core version v29.99.0-15de25ba2a28 (release build)
  2025-06-12T01:06:56Z Qt 6.7.3 (static), plugin=xcb
  2025-06-12T01:06:56Z Static plugins:
  2025-06-12T01:06:56Z  QMinimalIntegrationPlugin, version 395008
  2025-06-12T01:06:56Z  QXcbIntegrationPlugin, version 395008
  2025-06-12T01:06:56Z Style: fusion / QFusionStyle
  2025-06-12T01:06:56Z System: FreeBSD 14.3-RELEASE, x86_64-little_endian-lp64
  ```

  And here are the screenshots:

  ![image](https://github.com/user-attachments/assets/acf3fefc-ee3f-41cb-ab9a-3bc4d49c7054)

  ![image](https://github.com/user-attachments/assets/6280303f-9c7b-445d-8428-172ea998343d)

ACKs for top commit:
  vasild:
    ACK 173394d9511ed091e73eb12cb28f819026c09576

Tree-SHA512: 42a0bd11e4ef1a23efcfe6c4ab179dc667a076e65060891ce8358b3fe78de4e3ea33f975387d4236cc2ac620e2935b0a29c278065a47f038c66658106bf36755
2025-06-26 17:28:59 +01:00
Hennadii Stepanov
14653b869b
build: Find Boost in config mode
The `FindBoost` module has been removed by policy CMP0167.
2025-06-26 16:49:24 +01:00
merge-script
67ea4b9994
Merge bitcoin/bitcoin#32814: cmake: Explicitly specify Boost_ROOT for Homebrew's package
8800b5acc1ef7abe6c5260ae0be5386b1d593a19 cmake: Explicitly specify `Boost_ROOT` for Homebrew's package (Hennadii Stepanov)

Pull request description:

  On macOS, this PR ensures that the Boost package is located at its real path rather than via the symlink in the default prefix.

  A backport to 29.x is required for https://github.com/bitcoin/bitcoin/pull/32804, as this change prevents contamination of include directories by broad locations such as `/usr/local/include` or `/opt/homebrew/include`, which take precedence over Qt’s `-iframework` flags.

  Below is the relevant change in the configuration logs on my macOS 15.5 `x64`:
  - master branch @ ead44687483e9c936ba970de890c01d5e7ad3485:
  ```
  % cmake -B build
  <snip>
  -- Found Boost: /usr/local/include (found suitable version "1.88.0", minimum required is "1.73.0")
  <snip>
  ```
  - this PR:
  ```
  % cmake -B build
  <snip>
  -- Found Boost: /usr/local/opt/boost/include (found suitable version "1.88.0", minimum required is "1.73.0")
  <snip>
  ```

  This PR is forward-compatible with the changes proposed in https://github.com/bitcoin/bitcoin/pull/32667.

ACKs for top commit:
  fanquake:
    ACK 8800b5acc1ef7abe6c5260ae0be5386b1d593a19 Checked that this plus #32805 fixes #31009

Tree-SHA512: 114bd945ec0c06a8d15b565e5b9aafc3bcfdf2a4ba4400e072b8e31053dff0f9ef423b941ee1dff2113f83e08f7fada728383ae88b3ec380b5c3e40553205f7d
2025-06-26 15:00:48 +01:00
merge-script
5170ec1ae3
Merge bitcoin/bitcoin#32665: depends: Bump boost to 1.88.0 and use new CMake buildsystem
6c2538d5bfeafe6f234e5382c151d173826d78f0 depends: Bump boost to 1.88.0 and use new CMake buildsystem (Cory Fields)

Pull request description:

  Originally #30434.

  This has a few advantages over the old method of simply copying headers:
  - Installs proper CMake files which can be picked up by our buildsystem
  - Only installs necessary headers, not all of Boost

  Pulls in upstreamed https://github.com/boostorg/test/pull/445.

ACKs for top commit:
  willcl-ark:
    tACK 6c2538d5bfe
  hebasto:
    re-ACK 6c2538d5bfeafe6f234e5382c151d173826d78f0, only rebased since my previous [review](https://github.com/bitcoin/bitcoin/pull/32665#pullrequestreview-2891203225).

Tree-SHA512: fc3fce77b21c8ea500370841f44f1cc87e0bb09cdde55f75d2f90853cb06a6f8c73ac6ca9ca3e91a879e9f95dd59aa40254c1b04e7a168c52fa1b31cc5b7f537
2025-06-26 14:21:08 +01:00
merge-script
8fafb81320
Merge bitcoin/bitcoin#32805: cmake: Use HINTS instead of PATHS in find_* commands
ead44687483e9c936ba970de890c01d5e7ad3485 cmake: Use `HINTS` instead of `PATHS` in `find_*` commands (Hennadii Stepanov)

Pull request description:

  According to the CMake documentation, `HINTS` "should be paths computed by system introspection, such as a hint provided by the location of another item already found", which is precisely the case in the `FindQRencode` module.

  Entries in `HINTS` are searched before those in `PATHS`. On macOS, Homebrew’s `libqrencode` will therefore be located at its real path rather than via the symlink in the default prefix.

  A backport to 29.x is required for https://github.com/bitcoin/bitcoin/pull/32804, as this change prevents contamination of include directories by broad locations such as `/usr/local/include` or `/opt/homebrew/include`, which take precedence over Qt’s `-iframework` flags.

  Below is the relevant change in the configuration logs on my macOS 15.5 `x64`:
  - master branch @ ead44687483e9c936ba970de890c01d5e7ad3485:
  ```
  % cmake -B build -DBUILD_GUI=ON
  <snip>
  -- Found QRencode: /usr/local/lib/libqrencode.dylib (found version "4.1.1")
  <snip>
  ```
  - this PR:
  ```
  % cmake -B build -DBUILD_GUI=ON
  <snip>
  -- Found QRencode: /usr/local/Cellar/qrencode/4.1.1/lib/libqrencode.dylib (found version "4.1.1")
  <snip>
  ```

ACKs for top commit:
  fanquake:
    ACK ead44687483e9c936ba970de890c01d5e7ad3485

Tree-SHA512: 1f0b04e3efeb7fe3efbb969be911abbcf56030d715acd87c0fbaf24422cdf1122f169e32242571256916c96a159212842e1e73092145c63ecc495ce429c6e587
2025-06-26 12:10:00 +01:00
leopardracer
6bb38bf37f
Update p2p_monitor.py 2025-06-26 13:06:14 +03:00
ismaelsadeeq
9b75cfda4d test: retain the intended behavior of feature_fee_estimation.py nodes
- Increase block weight by 4000 for all nodes with custom -blockmaxweight.
  Prior to this commit, we generated blocks with 4000 weight units less worth of transactions.
  See https://github.com/bitcoin/bitcoin/issues/32461#issuecomment-2925282272 for details.
  This commit fixes it by increasing the block weight by 4000.
2025-06-26 07:13:27 +01:00
ismaelsadeeq
5c1236f04a test: fix incorrect subtest in feature_fee_estimation.py
- Update `check_smart_estimates` to calculate the fee rate ceiling
   by taking the maximum of fees seen, minrelaytxfee, and mempoolminfee.
- Improve the subtest name and comments.
2025-06-26 07:11:25 +01:00
merge-script
e5f9218b6a
Merge bitcoin/bitcoin#32742: test: fix catchup loop in outbound eviction functional test
dd8447f70faf6419b4617da3c1b57098e9cd66a6 test: fix catchup loop in outbound eviction functional test (Sebastian Falbesoner)

Pull request description:

  In the course of working on an equivalent of #32421 for the `CBlockHeader` class, I noticed that the [catchup loop in the outbound eviction functional test](19765dca19/test/functional/p2p_outbound_eviction.py (L86-L103)) currently has a small flaw: the contained waiting for a `getheaders` message

  19765dca19/test/functional/p2p_outbound_eviction.py (L98-L99)

  only waits for _any_ such message instead of one with the intended block hash after the first iteration. The reason is that the `prev_prev_hash` variable is set incorrectly, since the `tip_header` instance is not updated and its field `.hash` is None [1]. Fix that by updating `tip_header` after generating a new block and also use the correct field on it -- we want the tip header's previous hash (`.hashPrevBlock`), which will be the previous-previous hash in the next iteration as intended.

  Can be demonstrated by adding a debug output for `prev_prev_hash`, e.g.

  ```diff
  diff --git a/test/functional/p2p_outbound_eviction.py b/test/functional/p2p_outbound_eviction.py
  index 30ac85e32f..9886a49512 100755
  --- a/test/functional/p2p_outbound_eviction.py
  +++ b/test/functional/p2p_outbound_eviction.py
  @@ -85,6 +85,7 @@ class P2POutEvict(BitcoinTestFramework):

           self.log.info("Keep catching up with the old tip and check that we are not evicted")
           for i in range(10):
  +            print(f"i={i}, prev_prev_hash={prev_prev_hash}")
               # Generate an additional block so the peers is 2 blocks behind
               prev_header = from_hex(CBlockHeader(), node.getblockheader(best_block_hash, False))
               best_block_hash = self.generateblock(node, output="raw(42)", transactions=[])["hash"]
  ```

  master branch
  ```
  ...
  i=0, prev_prev_hash=21722572577213525620063947414919931742473663114977483853465070858884938201585
  i=1, prev_prev_hash=None
  i=2, prev_prev_hash=None
  i=3, prev_prev_hash=None
  i=4, prev_prev_hash=None
  i=5, prev_prev_hash=None
  i=6, prev_prev_hash=None
  i=7, prev_prev_hash=None
  i=8, prev_prev_hash=None
  i=9, prev_prev_hash=None
  ...
  ```

  PR branch
  ```
  ...
  i=0, prev_prev_hash=21722572577213525620063947414919931742473663114977483853465070858884938201585
  i=1, prev_prev_hash=23204083306104595181276643925327085197417756603258684897360269464191973063397
  i=2, prev_prev_hash=18117007775254206852722585270408843074799046031613422902091537272077477361634
  i=3, prev_prev_hash=30556804635951812756130312631227721973553160707632138130845362630877961299882
  i=4, prev_prev_hash=16476515948153779819467376247405243058769281687868039119037064816106574626111
  i=5, prev_prev_hash=14965506521435221774966695805624206855826023174786191695076697927307467053159
  i=6, prev_prev_hash=14510815979277079515923749862202324542606166669768865640616202929053689167149
  i=7, prev_prev_hash=15360268707191667685151951417759114642582372006627142890517655217275478262166
  i=8, prev_prev_hash=55984929479619644661389829786223559362979512070332438490054115824374865094074
  i=9, prev_prev_hash=6591573629906616262191232272909118561529534571119028248829355592878183757083
  ...
  ```

  [1] that's in my opinion another example how caching hashes is confusing and easy to be misused; it's better to remove it and just compute the hash on-the-fly, so returning None is not even possible anymore

ACKs for top commit:
  maflcko:
    lgtm ACK dd8447f70faf6419b4617da3c1b57098e9cd66a6
  mzumsande:
    Code Review ACK dd8447f70faf6419b4617da3c1b57098e9cd66a6
  pablomartin4btc:
    cr-ACK dd8447f70faf6419b4617da3c1b57098e9cd66a6

Tree-SHA512: bd8e786b52e3e96661453006140d6b8fad5a35f1c8d38243c61df52b19c97cd3800404745a2f9603bcdf0006e9780b4f15f8f7e4fa34ff07d52dba04d87b68d0
2025-06-25 18:13:33 -04:00
marcofleon
11d28f21bb Implement GenTxid as a variant
Reimplements the GenTxid class as a variant for better type safety.
Also adds two temporary functions to the old GenTxid class that
convert to and from the new variant.
2025-06-25 23:08:15 +01:00
Ava Chow
215e5999e2 wallet: Remove unused CachedTxGet{Available,Immature}Credit
These two functions are no longer used as GetBalances now uses the TXO
set rather than per-tx cached balances
2025-06-25 14:08:49 -07:00
Ava Chow
49675de035 wallet: Have GetDebit use the wallet's TXO set
Instead of looking up the previous tx in mapWallet, and then calling
IsMine on the specified output, use the TXO set and its cached IsMine
value.
2025-06-25 14:08:49 -07:00
Ava Chow
17d453cb3a wallet: Recompute wallet TXOs after descriptor migration
When a legacy wallet has been migrated to contain descriptors, but
before the transactions have been updated to match, we need to recompute
the wallet TXOs so that the transaction update will work correctly.
2025-06-25 14:08:49 -07:00
Ava Chow
764016eb22 wallet: Retrieve TXO directly in FetchSelectedInputs
Instead of searching mapWallet for the preselected inputs, search
m_txos.

wallet_fundrawtransaction.py spends external inputs and needs the change
output to also belong to the test wallet for the oversized tx test.
2025-06-25 14:08:49 -07:00
Ava Chow
c1801b78f1 wallet: Use wallet's TXO set in AvailableCoins
Instead of iterating every transaction and every output stored in wallet
when trying to figure out what outputs can be spent, iterate the TXO set
which should be a lot smaller.
2025-06-25 14:08:49 -07:00
Ava Chow
dde7cbe105 wallet: Change balance calculation to use m_txos
Since we track the outputs owned by the wallet with m_txos, we can now
calculate the balance of the wallet by iterating m_txos and summing up
the amounts of the unspent txos.

As ISMINE_USED is not an actual isminetype that we attach to outputs and
was just passed into `CachedTxGetAvailableCredit` for convenience, we
pull the same determining logic from that function into `GetBalances` in
order to preserve existing behavior.
2025-06-25 14:08:49 -07:00
Ava Chow
96e7a89c5e wallet: Recalculate the wallet's txos after any imports 2025-06-25 14:08:49 -07:00
Ava Chow
ae888c38d0 wallet: Exit IsTrustedTx early if wtx is already in trusted_parents 2025-06-25 14:08:49 -07:00
Ava Chow
ae0876ec42 wallet: Keep track of transaction outputs owned by the wallet
When loading transactions to the wallet, check the outputs, and keep
track of the ones that are IsMine.
2025-06-25 14:08:49 -07:00
Ava Chow
0f269bc48c walletdb: Load Txs last
Need to load txs last so that IsMine works.
2025-06-25 14:08:49 -07:00
Ava Chow
5cc32ee2a7 test: Test for balance update due to untracked output becoming spendable 2025-06-25 14:08:27 -07:00
Ava Chow
8222341d4f wallet: MarkDirty after AddWalletDescriptor
After adding a wallet descriptor (typically by import), mark all balance
caches dirty. This allows transactions that the wallet already knows
about that have outputs that are now ISMINE_SPENDABLE after the import
to actually be shown in balance calculations. Legacy wallet imports
would do this, but importdescriptors did not.
2025-06-25 14:08:27 -07:00
Ava Chow
e02f2d331c bench: Have AvailableCoins benchmark include a lot of unrelated utxos
One of the main issues with AvailableCoins is its performance when txs
have unrelated outputs, so update the benchmark to check the performance
of that.
2025-06-25 14:08:27 -07:00
merge-script
f27898c8bf
Merge bitcoin/bitcoin#32721: wallet, rpc: Remove deprecated balances from getwalletinfo and getunconfirmedbalance
c3fe85e2d6dd4f251a62a99fd891b0fa370f9712 wallet, rpc, test: Remove deprecated getunconfirmedbalance (Ava Chow)
0ec255139be3745a135386e9db957fe81bc3d833 wallet, rpc: Remove deprecated balances from getwalletinfo (Ava Chow)

Pull request description:

  `getwalletinfo` result fields `balance`, `immature_balance`, and `unconfirmed_balance`, and the `getunconfirmedbalance` RPC have all been deprecated since 0.19.0. It's been long enough that they should either be removed or undeprecated. The functionality provided by these RPCs is provided by `getbalances`.

ACKs for top commit:
  davidgumberg:
    ACK c3fe85e2d6
  rkrux:
    ACK c3fe85e2d6dd4f251a62a99fd891b0fa370f9712
  BrandonOdiwuor:
    ACK c3fe85e2d6dd4f251a62a99fd891b0fa370f9712 removing the deprecated `balance, unconfirmed_balance, immature_balance` fields from `getwalletinfo` and `getunconfirmedbalance` RPCs, as this infomation can be found on the `getbalances` RPC
  w0xlt:
    reACK c3fe85e2d6

Tree-SHA512: c7c4acfd9cabc7517ba813b95281a6c6a717a417312afd9346298669b4f7bd37724ad977148ce42db7fd47fc3d1f5a8482d8ff2e7b9cb74756b171a5b8b91ef2
2025-06-25 16:43:09 -04:00
merge-script
8578fabb95
Merge bitcoin/bitcoin#32597: wallet: Always set descriptor cache upgraded flag for new wallets
47237cd1938058b29fdec242c3a37611e255fda0 wallet, rpc: Output wallet flags in getwalletinfo (Ava Chow)
bc2a26b296238cbead6012c071bc7741c40fbd02 wallet: Add GetWalletFlags (Ava Chow)
69f588a99a7a79d1d72300bc0f2c8475f95f6c6a wallet: Set upgraded descriptor cache flag for newly created wallets (Ava Chow)

Pull request description:

  Newly created wallets will always have an upgraded descriptor cache, so set those.

  Also, to verify this behavior, add a new `flags` field to `getwalletinfo` and check that in the functional tests.

  Split from #32489

ACKs for top commit:
  Sjors:
    ACK 47237cd1938058b29fdec242c3a37611e255fda0
  w0xlt:
    ACK 47237cd193
  rkrux:
    ACK 47237cd1938058b29fdec242c3a37611e255fda0

Tree-SHA512: 97c7f85b858efe5ced9b8aafb6cd7c1a547de6f8013b82bfc75bc567cf73c9db5e168e3980355756541305520022fd776b8d4d240d3fb34ed86c27d2acaf4863
2025-06-25 16:14:01 -04:00
Max Edwards
941b8f54c0 ci: run get_previous_releases as part of test cross win job
This should enable wallet_migration functional test to run on Windows
2025-06-25 21:06:10 +01:00
Max Edwards
5e2182140b test: increment mocked time for migrating wallet backups
The wallet backups performed before migration use the time as part of
their filename. As the time is mocked, increment it between migration
attempts to prevent file name conflicts which is a problem on Windows.
2025-06-25 21:06:10 +01:00
Max Edwards
5174565802 ci: disable feature_unsupported_utxo_db functional test
This test required v0.14.3 which doesn't support special characters like
emojis in the datapath on windows. Functional test runner includes a few
emojis in it's default data directory.
2025-06-25 21:06:10 +01:00
Max Edwards
3dc90d69a6 test: remove mempool.dat before copying
Renaming mempool.dat from old node to new node fails on windows as the
file already exists.
2025-06-25 21:06:10 +01:00
Max Edwards
67a6b20d50 test: add windows support to get previous releases script
Needed to allow the wallet migration functional test to run under native
windows. Platform variable renamed to not clash with platform package.
2025-06-25 21:06:08 +01:00