42531 Commits

Author SHA1 Message Date
Hennadii Stepanov
6b8a74463b
cmake: Add FindZeroMQ module 2024-10-25 18:09:36 +01:00
Ava Chow
0c4ff18ee9
Merge bitcoin/bitcoin#30896: kernel: Move background load thread to node context
bc7900f33db3d01fb93dfee7981c01ea495cd42e kernel: Move background load thread to node context (TheCharlatan)

Pull request description:

  The thread handle is never used by the ChainstateManager, so move it out and into the node context. Users of the kernel library now no longer have to manually join the thread when destructing the ChainstateManager.

ACKs for top commit:
  maflcko:
    ACK bc7900f33db3d01fb93dfee7981c01ea495cd42e 🔄
  achow101:
    ACK bc7900f33db3d01fb93dfee7981c01ea495cd42e
  ryanofsky:
    Code review ACK bc7900f33db3d01fb93dfee7981c01ea495cd42e. Nice cleanup
  jonatack:
    Light ACK bc7900f33db3d01fb93dfee7981c01ea495cd42e
  stickies-v:
    ACK bc7900f33db3d01fb93dfee7981c01ea495cd42e

Tree-SHA512: add9c4823731324e3db50f95e023e99d55db7cc75c69083ae7c9c2157e5540968caa6cf10674aa4901f91366b02ebb1ff18bb977fec0a46431e2196448958b9d
2024-09-13 17:58:16 -04:00
Ava Chow
87d54500bf
Merge bitcoin/bitcoin#30892: test: Check already deactivated network stays suspended after dumptxoutset
72c9a1fe94f927220d3159f516fda684ae9d4caa test: Check that network stays suspended after dumptxoutset if it was off before (Fabian Jahr)

Pull request description:

  Follow-up to #30817 which covered the robustness of `dumptxoutset`: network is deactivated during the run but re-activated even when an issue was encountered. But it did not cover the case if the user had deactivated the network themselves before. In that case the user may want the network to stay off so the network is not reactivated after `dumptxoutset` finishes. A test for this behavior is added here.

ACKs for top commit:
  achow101:
    ACK 72c9a1fe94f927220d3159f516fda684ae9d4caa
  pablomartin4btc:
    ACK 72c9a1fe94f927220d3159f516fda684ae9d4caa
  theStack:
    utACK 72c9a1fe94f927220d3159f516fda684ae9d4caa
  tdb3:
    tested ACK 72c9a1fe94f927220d3159f516fda684ae9d4caa

Tree-SHA512: 18a57c5782e99a018414db0597e88debeb32666712c2a75dddbb55135d8f1ddd1eeacba8bbbd35fc03b6c4ab0522fe074ec08edea729560b018f51efabf00e89
2024-09-13 16:12:19 -04:00
Ava Chow
71af7435ef
Merge bitcoin/bitcoin#30233: refactor: move m_is_inbound out of CNodeState
07f4cebe5780f1039541d989e64b70eccc5b4eb5 refactor: move m_is_inbound out of CNodeState (Sergi Delgado Segura)

Pull request description:

  `m_is_inbound` cannot be changed throughout the life of a `Peer`. However, we are currently storing it in `CNodeState`, which requires locking `cs_main` in order to access it. This can be moved to the outside scope and only require `m_peer_mutex`.

  This is a refactor in preparation for Erlay reworks.

ACKs for top commit:
  maflcko:
    ACK 07f4cebe5780f1039541d989e64b70eccc5b4eb5 🗞
  achow101:
    ACK 07f4cebe5780f1039541d989e64b70eccc5b4eb5
  marcofleon:
    ACK 07f4cebe5780f1039541d989e64b70eccc5b4eb5
  naumenkogs:
    ACK 07f4cebe5780f1039541d989e64b70eccc5b4eb5

Tree-SHA512: bcc77135646c697204a4605971774cb3ccdf11b3e363a7339bfb4d1678de1681d6ca642dc467f7d71834a94dd56e05367e7fd32a3e6dc6be30c89342f39bf695
2024-09-13 15:40:43 -04:00
merge-script
1d5b2406bb
Merge bitcoin/bitcoin#30877: code style: update .editorconfig file
95560616fbab3ddca9d85980b7f73c8a816bc99e code style: update .editorconfig file (Sebastian Falbesoner)

Pull request description:

  Updates the .editorconfig file, first introduced in 2021 (see PR #21123, commit 7a135d57) w.r.t. following changes:
  - consider Rust .rs files (relevant since #28076, commit bbbbdb0c)
  - reflect build system change to CMake (#30454, #30664)
  - add setting for bare Makefile still used for depends builds

  Can be tested e.g. by using the editorconfig-vim plugin (https://github.com/editorconfig/editorconfig-vim). The PR is made under the assumption that the file is still considered useful, especially for new contributors. If people feel like that's not the case anymore, the alternative is to delete it, obviously.

Top commit has no ACKs.

Tree-SHA512: 8406b1caf31e310f7e17c607d97beac583481e71b4425e0be2bbd8207096aa374a70151b58aae5fdb648ef5ff5c7e1d0a2949e6de3355bdd2009d8353ee24af0
2024-09-13 17:00:10 +01:00
merge-script
fea550b480
Merge bitcoin/bitcoin#30890: doc: unit test runner help fixup and improvements
282f0e92559da23e356504a564a0322b9888e50b Unit test runner documentation fix and improvements (Jon Atack)

Pull request description:

  Running `test_bitcoin --help` prints the list of arguments that may be passed, not the list of tests, so fix that.

  Improve the content and order of the unit test documentation.

ACKs for top commit:
  pablomartin4btc:
    re-ACK 282f0e92559da23e356504a564a0322b9888e50b
  tdb3:
    re ACK 282f0e92559da23e356504a564a0322b9888e50b

Tree-SHA512: 0d25108ab641bcd9b53f99d139afeec90a34f44d5b00c3c677f7539d87782440a28fadc348663b8c28ace43552834737b9c1e8f5517c68edc8547695a9cb5063
2024-09-13 16:58:38 +01:00
Sebastian Falbesoner
95560616fb code style: update .editorconfig file
Updates the .editorconfig file, first introduced in 2021
(see PR #21123, commit 7a135d57) w.r.t. following changes:
- consider Rust .rs files (relevant since #28076, commit bbbbdb0c)
- reflect build system change to CMake (#30454, #30664)
- add setting for the bare Makefile still used for depends builds

Can be tested e.g. by using the editorconfig-vim plugin
(https://github.com/editorconfig/editorconfig-vim).
2024-09-13 17:55:10 +02:00
Jon Atack
282f0e9255 Unit test runner documentation fix and improvements
- Running `test_bitcoin --help` prints the list of arguments that may be passed,
  not the list of tests, so fix that.

- Improve the content and order of the unit test documentation.
2024-09-13 08:54:51 -06:00
merge-script
06a9f7789e
Merge bitcoin/bitcoin#30433: build: add standard branch-protection to hardening flags for aarch64-linux
001b1cf010453adbb1316a6fa8911398953afe61 build: use standard branch-protection for aarch64-linux (fanquake)

Pull request description:

  Use `-mbranch-protection=standard` when targetting `*aarch64-*-linux*`.
  Part of #24123, but this flag can already be used on a best effort basis.

  Note that this flag is also already used by default, in the toolchain, on various distros (i.e Fedora).

ACKs for top commit:
  hebasto:
    ACK 001b1cf010453adbb1316a6fa8911398953afe61.
  TheCharlatan:
    ACK 001b1cf010453adbb1316a6fa8911398953afe61

Tree-SHA512: 2d7ae60f59921a62d51139cb0fd5cecbed4f63266564b2623b7d160f5b0c2c42c78ef8aeff787f485eccc46a9ffd5da70023ec093df6add7c982e0d48a1601b5
2024-09-13 15:29:13 +01:00
TheCharlatan
bc7900f33d
kernel: Move background load thread to node context
The thread handle is never used by the ChainstateManager, so move it out
and into the node context. Users of the kernel library now no longer
have to manually join the thread when destructing the ChainstateManager.
2024-09-13 16:10:31 +02:00
Hennadii Stepanov
e43ce250c6
Merge bitcoin-core/gui#835: Fix crash when closing wallet
a965f2bc07a3588f8c2b8d6a542961562e3f5d0e gui: fix crash when closing wallet (furszy)

Pull request description:

  The crash occurs because `WalletController::removeAndDeleteWallet` is called twice for the
  same wallet model: first in the GUI's button connected function `WalletController::closeWallet`,
  and then again when the backend emits the `WalletModel::unload` signal.

  This causes the issue because `removeAndDeleteWallet` inlines an `erase(std::remove())`.
  So, if `std::remove` returns an iterator to the end (indicating the element wasn't found
  because it was already erased), the subsequent call to `erase` leads to an undefined behavior.

  Test Notes:
  Try closing any wallet using the toolbar button in the GUI. It will crash in master, but not here.

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

ACKs for top commit:
  pablomartin4btc:
    tACK a965f2bc07a3588f8c2b8d6a542961562e3f5d0e
  jarolrod:
    ACK a965f2bc07a3588f8c2b8d6a542961562e3f5d0e
  hebasto:
    ACK a965f2bc07a3588f8c2b8d6a542961562e3f5d0e.

Tree-SHA512: c94681b95cb566f7aabd0d4fb10f797c2cea6ac569abc265e918f08e6abae3335432a0b0879372b54b2c109798ed0a4a249bf162c34add59cbd18d38a2d9660e
2024-09-13 11:28:23 +01:00
fanquake
001b1cf010
build: use standard branch-protection for aarch64-linux 2024-09-13 11:26:40 +01:00
furszy
a965f2bc07
gui: fix crash when closing wallet
The crash occurs because 'WalletController::removeAndDeleteWallet' is called
twice for the same wallet model: first in the GUI's button connected function
'WalletController::closeWallet', and then again when the backend emits the
'WalletModel::unload' signal.

This causes the issue because 'removeAndDeleteWallet' inlines an
erase(std::remove()). So, if 'std::remove' returns an iterator to the end
(indicating the element wasn't found because it was already erased), the
subsequent call to 'erase' leads to an undefined behavior.
2024-09-12 19:25:45 -03:00
Fabian Jahr
72c9a1fe94
test: Check that network stays suspended after dumptxoutset if it was off before 2024-09-12 23:21:58 +02:00
Ava Chow
cf0120ff02
Merge bitcoin/bitcoin#30880: test: Wait for local services to update in feature_assumeutxo
19f4a7c95a99162122068d4badffeea240967a65 test: Wait for local services to update in feature_assumeutxo (Fabian Jahr)

Pull request description:

  Closes #30878

  It seems like there is a race where the block is stored locally and `getblock` does not error anymore, but `ActivateBestChain` has not finished yet, so the local services are not updated yet either. Fix this by waiting for the local services to update.

  Can be reproduced locally by adding the sleep here:

  ```cpp
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
  src/validation.cpp:3567: bool Chainstate::ActivateBestChain(BlockValidationState& state, std::shared_ptr< │
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────┘
          }

          if (WITH_LOCK(::cs_main, return m_disabled)) {
              std::this_thread::sleep_for(std::chrono::seconds(10));
              // Background chainstate has reached the snapshot base block, so exit.

              // Restart indexes to resume indexing for all blocks unique to the snapshot
  ```

ACKs for top commit:
  maflcko:
    review-only ACK 19f4a7c95a99162122068d4badffeea240967a65
  achow101:
    ACK 19f4a7c95a99162122068d4badffeea240967a65
  pablomartin4btc:
    tACK 19f4a7c95a99162122068d4badffeea240967a65
  furszy:
    Code review ACK [19f4a7c](19f4a7c95a).

Tree-SHA512: 70dad3795988956c5e20f2d2d895fb56c5e3ce257c7547d3fd729c88949f0e24cb34594da1537bce8794ad02b2db44e7e46e995aa32539cd4dd84c4f1d4bb1c4
2024-09-12 14:52:14 -04:00
Ryan Ofsky
e46bebb444
Merge bitcoin/bitcoin#30546: util: Use consteval checked format string in FatalErrorf, LogConnectFailure
fa5bc450d5d4c1d2daf7b205f1678402c3c21678 util: Use compile-time check for LogConnectFailure (MarcoFalke)
fa7087b896c0150c29d7a27c53e0533831a2bf3b util: Use compile-time check for FatalErrorf (MarcoFalke)
faa62c0112f2b7ab69c80a5178f5b79217bed0a6 util: Add ConstevalFormatString (MarcoFalke)
fae7b83eb58d22ed83878561603991131372cdd7 lint: Remove forbidden functions from lint-format-strings.py (MarcoFalke)

Pull request description:

  The `test/lint/lint-format-strings.py` was designed to count the number of format specifiers and assert that they are equal to the number of parameters passed to the format function. The goal seems reasonable, but the implementation has many problems:

  * It is written in Python, meaning that C++ code can not be parsed correctly. Currently it relies on brittle regex and string parsing.
  * Apart from the parsing errors, there are also many logic errors. For example, `count_format_specifiers` allows a mix of positional specifiers and non-positional specifiers, which can lead to runtime format bugs. Also, `count_format_specifiers` silently skipped over "special" format specifiers, which are valid in tinyformat, which again can lead to runtime format bugs being undetected.
  * The brittle logic has a history of breaking in pull requests that are otherwise fine. This causes the CI to fail and the pull request being blocked from progress until the bug in the linter is fixed, or the code is rewritten to work around the bug.
  * It is only run in the CI, or when the developer invokes the script. It would be better if the developer got the error message at compile-time, directly when writing the code.

  Fix all issues by using a `consteval` checked format string in `FatalErrorf` and `LogConnectFailure`.

  This is the first step toward https://github.com/bitcoin/bitcoin/issues/30530 and a follow-up will apply the approach to the other places.

ACKs for top commit:
  stickies-v:
    re-ACK fa5bc450d5d4c1d2daf7b205f1678402c3c21678
  l0rinc:
    ACK fa5bc450d5d4c1d2daf7b205f1678402c3c21678
  hodlinator:
    ACK fa5bc450d5d4c1d2daf7b205f1678402c3c21678
  ryanofsky:
    Code review ACK fa5bc450d5d4c1d2daf7b205f1678402c3c21678

Tree-SHA512: d6189096b16083143687ed1b1559cf4f92f97dd87bc5d00673e44f4fb9fce7bb7b215cfdfc39b6e6a24f0b75a79a03ededce966639e554f7172e1fc22cf015ae
2024-09-12 13:21:53 -04:00
Ryan Ofsky
be768dbd18
Merge bitcoin/bitcoin#30618: test: support std::optional in BOOST_CHECK_* and increase FromUserHex fuzz feature coverage
1eac96a503b6bac3eaf5d0eb3d23ffde3bfbf9aa Compare FromUserHex result against other hex validators and parsers (Lőrinc)
19947863e16425e6a119e7a4819867292b1235ee Use BOOST_CHECK_EQUAL for optional, arith_uint256, uint256, uint160 (Lőrinc)
743ac30e349e181c26a2d2af0bcb93b0835ce521 Add std::optional support to Boost's equality check (Lőrinc)

Pull request description:

  Enhanced `FromUserHex` coverage by:

  * Added `std::optional` support to `BOOST_CHECK_EQUAL`, allowing direct comparisons of `std::optional<T>` with other `T` expected values.
  * Increased fuzz testing for hex parsing to validate against other hex validators and parsers.

  ----

  * Use BOOST_CHECK_EQUAL for https://github.com/bitcoin/bitcoin/pull/30569#discussion_r1706637780 arith_uint256, uint256, uint160

  Example error before:
  > unknown location:0: fatal error: in "validation_chainstatemanager_tests/chainstatemanager_args": std::bad_optional_access: bad_optional_access
  test/validation_chainstatemanager_tests.cpp:781: last checkpoint

  after:
  > test/validation_chainstatemanager_tests.cpp:801: error: in "validation_chainstatemanager_tests/chainstatemanager_args": check set_opts({"-assumevalid=0"}).assumed_valid_block == uint256::ZERO has failed [std::nullopt != 0000000000000000000000000000000000000000000000000000000000000000]

ACKs for top commit:
  stickies-v:
    re-ACK 1eac96a503b6bac3eaf5d0eb3d23ffde3bfbf9aa
  ryanofsky:
    Code review ACK 1eac96a503b6bac3eaf5d0eb3d23ffde3bfbf9aa. Only changes since last review were auto type and fuzz test tweaks.
  hodlinator:
    ACK 1eac96a503b6bac3eaf5d0eb3d23ffde3bfbf9aa

Tree-SHA512: f1d2c65f0ee4e97830700be5b330189207b11ed0c89a8cebf0f97d43308402a6b3732e10130c79a0c044f7d2eeabfb5359990825aadf02c4ec19428dcd982b00
2024-09-12 12:36:37 -04:00
merge-script
07c7c96022
Merge bitcoin/bitcoin#30883: build: Revert "Minimize I/O operations in GenerateHeaderFrom{Json,Raw}.cmake"
fdeb717e78fd55fbfda199c87002358bdc5895af Revert "build: Minimize I/O operations in `GenerateHeaderFrom{Json,Raw}.cmake`" (Hennadii Stepanov)

Pull request description:

  This reverts commit b07fe666f27e2b2515d2cb5a0339512045e64761 from https://github.com/bitcoin/bitcoin/pull/30842.

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

  Apparently, the `string(APPEND ...)` command isn't optimized for large strings.

ACKs for top commit:
  maflcko:
    review ACK fdeb717e78fd55fbfda199c87002358bdc5895af

Tree-SHA512: ad5c3d49d3395ab318edcd7c9a98090838bec0cd3c1f1cc6ebc6f4262df2494f605458b523251bf5e590bbcfda15ed963f0a814678135ce4cc2dca9a108d20c7
2024-09-12 16:53:31 +01:00
merge-script
24817e8b15
Merge bitcoin/bitcoin#30814: kernel: Create usable static kernel library
0dd16d7118f10ac291a45644769121cbdfd2352f build: Add a pkg-config file for libbitcoinkernel (TheCharlatan)
45be32f8384398ad8d590137d05a6373aa827b75 build: Produce a usable static kernel library (TheCharlatan)

Pull request description:

  Since the move to cmake, the kernel static library that is installed after a cmake --install build is unusable. It lacks symbols for the internal libraries, besides those defined in the kernel library target.

  Fix this by explicitly installing all the required internal static libraries. To make usage of these installed libraries easy, add a pkg-config file that can be used during linking.

  This patch can be tested with:

  ```
  cmake -B build -DBUILD_SHARED_LIBS=OFF -DBUILD_KERNEL_LIB=ON
  cmake --build build
  cmake --install build
  g++ -std=c++20 -o test_chainstate src/bitcoin-chainstate.cpp -I/home/drgrid/bitcoin/src $(pkg-config --libs --static libbitcoinkernel)
  ```

  Attempts to solve #30801

ACKs for top commit:
  hebasto:
    ACK 0dd16d7118f10ac291a45644769121cbdfd2352f.
  fanquake:
    ACK 0dd16d7118f10ac291a45644769121cbdfd2352f - this looks like a good place to start.
  ryanofsky:
    Code review ACK 0dd16d7118f10ac291a45644769121cbdfd2352f

Tree-SHA512: 92f7bc959584bdc595f4aa6d0ab133355481075fe8564224fd7ac122fd7bdd75f98cf26ef0a6a7d84fd552d2258ddca1b674eca91122469a58bacc5f0a0ec2ef
2024-09-12 16:39:34 +01:00
Hennadii Stepanov
fdeb717e78
Revert "build: Minimize I/O operations in GenerateHeaderFrom{Json,Raw}.cmake"
This reverts commit b07fe666f27e2b2515d2cb5a0339512045e64761.
2024-09-12 16:34:57 +01:00
Sergi Delgado Segura
07f4cebe57 refactor: move m_is_inbound out of CNodeState
`m_is_inbound` cannot be changed throughout the life of a `Peer`. However, we
are currently storing it in `CNodeState`, which requires locking `cs_main` in
order to access it. This can be moved to the outside scope and only require
`m_peer_mutex`.

This is a refactor in preparation for Erlay reworks.
2024-09-12 11:20:44 -04:00
Fabian Jahr
19f4a7c95a
test: Wait for local services to update in feature_assumeutxo 2024-09-12 16:30:50 +02:00
merge-script
7d43bca052
Merge bitcoin/bitcoin#30872: test: fix exclude parsing for functional runner
72b46f28bf8d37a166961b5aa2a22302b932b756 test: fix exclude parsing for functional runner (Max Edwards)

Pull request description:

  This restores previous behaviour of being able to exclude a test by name without having to specify .py extension.

  It was noticed in https://github.com/bitcoin/bitcoin/issues/30851 that tests were no longer being excluded.

  PR https://github.com/bitcoin/bitcoin/pull/30244 introduced being able to exclude a specific tests based on args (such as `--exclude "rpc_bind.py --ipv6`) but it made the wrong assumption that test names intended to be excluded would include the .py extension.

  The following https://github.com/bitcoin/bitcoin/pull/30244#issuecomment-2344009687 shows that this is not how the `--exclude` flag was used in CI.

  https://github.com/bitcoin/bitcoin/pull/30244#issuecomment-2344009687 gave three examples of `--exclude` being used in CI so I compared the number of tests that the runner would run for these three examples in three situations, before #30244 was introduced, in master today and with this PR applied.

  Example:

  `--previous-releases --coverage --extended --exclude feature_dbcrash`

  Test count:
  Before #30244 introduced: 314
  Master: 315
  With this PR: 314

  Example:

  `--exclude feature_init,rpc_bind,feature_bind_extra`

  Test count:
  Before #30244 introduced: 306
  Master 311
  With this PR: 306

  Example:

  `--exclude rpc_bind,feature_bind_extra`

  Before #30244 introduced:  307
  Master 311
  With this PR: 307

  I've also tested that the functionality introduced with #30244 remains and we can still exclude specific tests by argument.

ACKs for top commit:
  maflcko:
    review ACK 72b46f28bf8d37a166961b5aa2a22302b932b756
  willcl-ark:
    ACK 72b46f28bf8d37a166961b5aa2a22302b932b756

Tree-SHA512: 37c0e3115f4e3efdf9705f4ff8cd86a5cc906aacc1ab26b0f767f5fb6a953034332b29b0667073f8382a48a2fe9d649b7e60493daf04061260adaa421419d8c8
2024-09-12 15:30:34 +01:00
merge-script
cf786eccd7
Merge bitcoin/bitcoin#30865: build: Skip secp256k1 ctime tests when tests are not being built
23eedc5d1e24b3d31da7902ece5182b9b24672d8 build: Skip secp256k1 ctime tests when tests are not being built (Hennadii Stepanov)

Pull request description:

  Fixes https://github.com/bitcoin/bitcoin/pull/30791#issuecomment-2340860619:
  > Building with a fuzz engine fails, because the ctime tests are auto-detected in cmake, based on whether or not valgrind-devel is installed or not.

ACKs for top commit:
  maflcko:
    re-review ACK 23eedc5d1e24b3d31da7902ece5182b9b24672d8
  fanquake:
    ACK 23eedc5d1e24b3d31da7902ece5182b9b24672d8

Tree-SHA512: bfc0f2798acd36be9c52073d578b42c002606c60ef3fe8ef633eaea4f5382a3e9765d31637e4c25d8b71fd70473b29c24af4732e55e5183f27b48725b61fa15b
2024-09-12 15:29:33 +01:00
Hennadii Stepanov
23eedc5d1e
build: Skip secp256k1 ctime tests when tests are not being built
Co-authored-by: fanquake <fanquake@gmail.com>
2024-09-12 14:24:26 +01:00
MarcoFalke
fa5bc450d5
util: Use compile-time check for LogConnectFailure 2024-09-12 15:01:35 +02:00
MarcoFalke
fa7087b896
util: Use compile-time check for FatalErrorf 2024-09-12 15:01:20 +02:00
MarcoFalke
faa62c0112
util: Add ConstevalFormatString
The type is used to wrap a format string once it has been compile-time
checked to contain the right number of format specifiers.
2024-09-12 15:00:53 +02:00
Max Edwards
72b46f28bf test: fix exclude parsing for functional runner
This restores previous behaviour of being able to exclude a test by name without having to specify .py extension.
2024-09-12 13:42:34 +01:00
merge-script
a5e99669cc
Merge bitcoin/bitcoin#30733: test: remove unused src_dir param from run_tests after CMake migration
2ad560139b80e149844f285cd1456bb7cc0eb1ee Remove unused src_dir param from run_tests (Lőrinc)

Pull request description:

  The `src_dir` usage was removed in  a8a2e364ac (diff-437d7f6e9f2229879b60aae574a8217f14c643bbf3cfa9225d8011d6d52df00cL598), making the parameter unused.

Top commit has no ACKs.

Tree-SHA512: 1fd8b93811b4ab467ba5a160a4fe204e9606e1bf237c7595ed6f8b7821cf59d2a776c0e1e154852a45b2a35e5bdbd8996314e4f63a9c750f21b9a17875cb636a
2024-09-12 12:17:06 +01:00
merge-script
0c1e507278
Merge bitcoin/bitcoin#30871: build: Add more cmake presets
f15e817811e328423ea489870ead089128a6ef8c build: add more CMake presets (dev-mode, libfuzzer, libfuzzer-nosan) (Pieter Wuille)

Pull request description:

  Add three more cmake presets to the project-wide `CMakePresets.json` file:
  * `dev-mode`: enables all features and dependencies
  * `libfuzzer`: builds for fuzzing with libfuzzer and the typical sanitizers (but not the optional ones that require suppressions) enabled.
  * `libfuzzer-nosan`: builds for fuzzing with libfuzzer and no (other) sanitizers

  ... and then uses these in some documentation.

ACKs for top commit:
  ryanofsky:
    Code review ACK f15e817811e328423ea489870ead089128a6ef8c. This change is much needed to simplify my command line.
  TheCharlatan:
    ACK f15e817811e328423ea489870ead089128a6ef8c

Tree-SHA512: a5f67bb7119fd36832ca5eb7189db04bfaf88f954aa461bfb2aeb866469057b0d0272835c418bc3a264c30dd8fba6d2e2cc8a6741a889f28f52c1c09b3ba9704
2024-09-12 11:33:15 +01:00
merge-script
fcb61bbc8d
Merge bitcoin/bitcoin#27038: security-check: test for _FORTIFY_SOURCE usage in release binaries
be4f78275fa6608b11377dd5a29a809597d3fe8d contrib: test for FORTIFY_SOURCE in security-check.py (fanquake)

Pull request description:

  Test for the existence of fortified functions in the ELF release binaries.
  Currently skips `bitcoin-util` and checks for RISC-V.

ACKs for top commit:
  TheCharlatan:
    ACK be4f78275fa6608b11377dd5a29a809597d3fe8d

Tree-SHA512: decea5f359f1e673aa0119916f674f409a13b69db7da366cd95c1540201e117ff5a979da67bc2517fe786c2ac23d1006a9aaf662d7eadeec35da6aae4998c065
2024-09-12 11:32:31 +01:00
merge-script
85833cf05f
Merge bitcoin/bitcoin#30847: test: Drop no longer needed workarounds
5c80192ff6b982ee3a75be4142fe942b8206f2cd test: Drop no longer needed workarounds (Hennadii Stepanov)

Pull request description:

  This PR deletes the workarounds introduced in https://github.com/bitcoin/bitcoin/pull/16564 and https://github.com/bitcoin/bitcoin/pull/15382, as `ctest` skips these cases gracefully: 5c80192ff6/src/test/CMakeLists.txt (L201-L203)

ACKs for top commit:
  kevkevinpal:
    ACK [5c80192](5c80192ff6)
  fanquake:
    ACK 5c80192ff6b982ee3a75be4142fe942b8206f2cd. Looks correct:

Tree-SHA512: c47c606ecf7d64016b3c6353c3d4898350edc2caeac494dfd44484417f500a73f0c88c39f0f24651f3a02ef31ed9ca5c70d938bb9a8ca1eea54927e4d6a8fcd2
2024-09-12 11:28:27 +01:00
merge-script
11e2f9fff4
Merge bitcoin/bitcoin#30835: build: Introduce "Kernel" installation component
7b04fabe2d95f05a295b1ef30c9aeab7f753ed46 build: Introduce "Kernel" installation component (Hennadii Stepanov)

Pull request description:

  This PR enables building and installing only `libbitcoinkernel`, without the need to disable other targets during the project build system generation:

  ```
  $ rm -rf build && cmake -B build -DBUILD_KERNEL_LIB=ON
  $ cmake --build build --target bitcoinkernel
  $ cmake --install build --component Kernel --prefix /home/hebasto/INSTALL
  -- Install configuration: "RelWithDebInfo"
  -- Installing: /home/hebasto/INSTALL/lib/libbitcoinkernel.so
  ```

  Please note, that only the `bitcoinkernel` target is being built.

  Related to https://github.com/bitcoin/bitcoin/issues/30801 and https://github.com/bitcoin/bitcoin/pull/30814.

ACKs for top commit:
  TheCharlatan:
    ACK 7b04fabe2d95f05a295b1ef30c9aeab7f753ed46
  ryanofsky:
    Code review ACK 7b04fabe2d95f05a295b1ef30c9aeab7f753ed46

Tree-SHA512: eac114dde059e47c91938a4a9108fc0fc693b5342ed3b6ecb971615be8ad3225b9985aae12d6ad18e673edf1bd39a5ecf259c1b61734f221669091bf2ce93a67
2024-09-12 10:58:52 +01:00
merge-script
db8350b0e3
Merge bitcoin/bitcoin#30803: build: Minor build system fixes and amendments
1cc93fe7b40f10a7d1d1189058af98a2bce31381 build: Delete dead code that implements `IF_CHECK_FAILED` option (Hennadii Stepanov)
341ad238091d4df520c70f1757b017e6f6620f24 build: Delete MSVC special case for `BUILD_FOR_FUZZING` option (Hennadii Stepanov)
fdad128b528bc8622bc6d8343026c28b18260f64 build: Stop enabling CMake's CMP0141 policy (Hennadii Stepanov)
b2a6f545b4f6e3442ae51f66a6f3c1de92d00a1b doc: Drop `ctest` command from Windows cross-compiling instructions (Hennadii Stepanov)
73b618582dcf06dd01be062fe0f81060cfcb48d8 build: Print `CMAKE_CXX_COMPILER_ARG1` in summary (Hennadii Stepanov)
f03c9420958de31fdfecec5fa3e23134aac61803 build, test: Add missed log options (Hennadii Stepanov)
6f2cb0eafdef81fb9464a4679c3a5905d19e5103 doc: Amend comment about ZeroMQ config files (Hennadii Stepanov)

Pull request description:

  This PR addresses the following comments:
  - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1742342524
  - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1728692369
  - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1736110362
  - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1742931121
  - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1747723657
  - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1742328675
  - https://github.com/bitcoin/bitcoin/pull/30454#discussion_r1723106474

ACKs for top commit:
  sipsorcery:
    tACK 1cc93fe7b40f10a7d1d1189058af98a2bce31381 (win11 msvc).
  maflcko:
    re-ACK 1cc93fe7b40f10a7d1d1189058af98a2bce31381

Tree-SHA512: a390797bb4d3b7eb9163653b6c9c324e7a01090f6cdda74df7349a24a5c4a2084e5912878747f56561315afc70cae9adb1c363f47ceb0af96004ea591d25171b
2024-09-12 10:30:06 +01:00
merge-script
a86e7a476d
Merge bitcoin/bitcoin#30838: build: Use CMake's default permissions in macOS deploy target
5ba03e7d35e1b47ba864c9ae3c94af97cd3ae10b build: Use CMake's default permissions in macOS `deploy` target (Hennadii Stepanov)

Pull request description:

  This PR ensures that the file permissions in macOS `zip` archives are independent of the user's `umask` value.

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

ACKs for top commit:
  fanquake:
    ACK 5ba03e7d35e1b47ba864c9ae3c94af97cd3ae10b - I'm going to merge this now so we return to usable (comparable) guix builds.

Tree-SHA512: 78f724cd3ffd5c1fd5fc1b4832f1e8154c62723f3de5ac9599f44715cbd08a3dfbb806801411c55069773d2e34c9f8cab25585dbad2f032c36b68dd83cb51847
2024-09-12 10:17:08 +01:00
merge-script
f0eb63399a
Merge bitcoin/bitcoin#30841: ci: Post CMake-migration fixes and amendments
c45186ca548362b75a6640393ccf79b11ff727da ci: Switch from `make` to `cmake --build` (Hennadii Stepanov)
6e5f33af581e0a74897a6cc9fad558b29ad8b88e ci: Handle log files regardless of CMake's version (Hennadii Stepanov)

Pull request description:

  This PR addresses the change in logging that [happened](https://cmake.org/cmake/help/latest/release/3.26.html#configure-log) in CMake 3.26.

  Additionally, the `make` invocation replaced with `cmake --build`.

  Here are examples of the CI logs:
  - for a an error during the build system generation: https://cirrus-ci.com/build/5210987156996096
  - for a compiler error: https://cirrus-ci.com/build/4617660913156096

ACKs for top commit:
  maflcko:
    review ACK c45186ca548362b75a6640393ccf79b11ff727da
  fanquake:
    ACK c45186ca548362b75a6640393ccf79b11ff727da

Tree-SHA512: 2096f08c482ab9e10056cd4ec694ce40996243e2a1af2212dfff8cccbf0f51391d9a3dc396f7bba4f2877072a13a42bf667a02a44eab44e917aafb14d04e8e39
2024-09-12 09:54:20 +01:00
merge-script
155963768a
Merge bitcoin/bitcoin#30842: build: Minimize I/O operations in GenerateHeaderFrom{Json,Raw}.cmake
b07fe666f27e2b2515d2cb5a0339512045e64761 build: Minimize I/O operations in `GenerateHeaderFrom{Json,Raw}.cmake` (Hennadii Stepanov)

Pull request description:

  This PR aims to reduce build time by replacing multiple `file(WRITE|APPEND ...)` commands with a single `file(WRITE ...)` command.

  Due to differences in implementation (e.g., filesystem design, system calls, caching), a noticeable improvement in build time is observed only on Windows.

  Additionally, the code has been refactored to remove the `remainder` local variables.

ACKs for top commit:
  sipsorcery:
    tACK b07fe666f27e2b2515d2cb5a0339512045e64761
  maflcko:
    review ACK b07fe666f27e2b2515d2cb5a0339512045e64761
  TheCharlatan:
    ACK b07fe666f27e2b2515d2cb5a0339512045e64761

Tree-SHA512: 6ed3ae8fe7d8859af38d83918eddf7cb318607787863b95589f4a7a45a36f8c4bd1c01e366078d0515115c121bc857dc63471e52ff26fc49edbc8bb69875e947
2024-09-12 09:37:42 +01:00
merge-script
c773618886
Merge bitcoin/bitcoin#30867: build: Fix ENABLE_WALLET option
0037d53d1a21ec8a5a97a83ab716d68030446021 build: Fix `ENABLE_WALLET` option (Hennadii Stepanov)

Pull request description:

  The removed commands were left over from the transition from autodetection to explicit options in the CMake staging branch. These commands prevented the `-DENABLE_WALLET=OFF` option from being work properly when building with depends.

  How to test:
  ```
  $ make -C depends NO_QT=1
  ```

  On the master branch @ c66c68345efb0bb3d5613ebac703cde779fa0f01:
  ```
  $ rm -rf build && cmake -B build --toolchain depends/x86_64-pc-linux-gnu/toolchain.cmake -DENABLE_WALLET=OFF
  < snip >
  Optional features:
    wallet support ...................... ON
     - descriptor wallets (SQLite) ...... ON
     - legacy wallets (Berkeley DB) ..... ON
    external signer ..................... ON
  < snip >
  ```

  With this PR:
  ```
  $ rm -rf build && cmake -B build --toolchain depends/x86_64-pc-linux-gnu/toolchain.cmake -DENABLE_WALLET=OFF
  < snip >
  Optional features:
    wallet support ...................... OFF
    external signer ..................... ON
  < snip >

ACKs for top commit:
  maflcko:
    review ACK 0037d53d1a21ec8a5a97a83ab716d68030446021
  kevkevinpal:
    ACK [0037d53](0037d53d1a)
  pablomartin4btc:
    tACK 0037d53d1a21ec8a5a97a83ab716d68030446021

Tree-SHA512: 0eb14ef104f12a4205172d646c2af820e04514286b5b9a4ceb59c248ce880198dd4051d669098c46c0c0dce069bb60899d90509bbcae65cbeb958e52564fe920
2024-09-12 09:28:20 +01:00
Ava Chow
349632e022
Merge bitcoin/bitcoin#30807: Fix peers abruptly disconnecting from AssumeUTXO nodes during IBD
992f83bb6f4b29b44f4eaace1d1a2c0001d43cac test: add coverage for assumeUTXO honest peers disconnection (furszy)
6d5812e5c852c233bd7ead2ceef051f8567619ed assumeUTXO: fix peers disconnection during sync (furszy)

Pull request description:

  Because AssumeUTXO nodes prioritize tip synchronization, they relay their local
  address through the network before completing the background chain sync.
  This, combined with the advertising of full-node service (`NODE_NETWORK`), can
  result in an honest peer in IBD connecting to the AssumeUTXO node (while syncing)
  and requesting an historical block the node does not have. This behavior leads to
  an abrupt disconnection due to perceived unresponsiveness from the AssumeUTXO
  node.

  This lack of response occurs because nodes ignore `getdata` requests when they do
  not have the block data available (further discussion can be found in #30385).

  Fix this by refraining from signaling full-node service support while the
  background chain is being synced. During this period, the node will only
  signal `NODE_NETWORK_LIMITED` support. Then, full-node (`NODE_NETWORK`)
  support will be re-enabled once the background chain sync is completed.

  Thanks mzumsande for a post-#30385 convo too.

  Testing notes:
  Just cherry-pick the second commit (bb08c22) on master.
  It will fail there, due to the IBD node requesting historical blocks to the snapshot
  node - which is bad because the snapshot node will ignore the requests and
  stall + disconnect after some time.

ACKs for top commit:
  achow101:
    ACK 992f83bb6f4b29b44f4eaace1d1a2c0001d43cac
  naumenkogs:
    ACK 992f83bb6f4b29b44f4eaace1d1a2c0001d43cac
  mzumsande:
    ACK 992f83bb6f4b29b44f4eaace1d1a2c0001d43cac

Tree-SHA512: fef525d1cf3200c2dd89a346be9c82d77f2e28ddaaea1f490a435e180d1a47a371cadea508349777d740ab56e94be536ad8f7d61cc81f6550c58b609b3779ed3
2024-09-11 13:37:40 -04:00
Ava Chow
f6298a878f
Merge bitcoin/bitcoin#30840: docs: Updated debug build instructions for cmake
0b003e1ff7e09b56cd013b15f1998495994b7211 docs: Updated debug build instructions for cmake (ion-)

Pull request description:

  In the [developer notes](https://github.com/bitcoin/bitcoin/blob/master/doc/developer-notes.md) the section on [compiling for debug](https://github.com/bitcoin/bitcoin/blob/master/doc/developer-notes.md#compiling-for-debugging) displays outdated instructions that were applicable before the move to cmake build system.

  This PR just gives instructions on how to build for debugging in the context of cmake.

ACKs for top commit:
  kevkevinpal:
    ACK [0b003e1](0b003e1ff7)
  achow101:
    ACK 0b003e1ff7e09b56cd013b15f1998495994b7211
  tdb3:
    ACK 0b003e1ff7e09b56cd013b15f1998495994b7211

Tree-SHA512: fc8b4824d68e47b3e64320b4ce728df4242d00c2e8c75dcf5daa60af3050c62d94fa9741e447c7d81e72194470ed68a4e19bbee8cf6a1412d6566c7b699cf242
2024-09-11 13:20:19 -04:00
Ava Chow
a8809aeb6e
Merge bitcoin/bitcoin#30870: docs: updated developer notes for --with-sanitizers to -DSANITIZERS
4b1ce3cac81497dd094e8c34550edf633f4d38ae docs: updated developer notes for --with-sanitizers to -DSANITIZERS and removed resource for -fsanitze flags (kevkevinpal)

Pull request description:

  In the developer notes we are incorrectly using the Autotools `--with-sanitizers` configure flag which we should now be using `cmake -B build -DSANITIZERS=<values>` instead now

ACKs for top commit:
  maflcko:
    review ACK 4b1ce3cac81497dd094e8c34550edf633f4d38ae
  achow101:
    ACK 4b1ce3cac81497dd094e8c34550edf633f4d38ae
  pablomartin4btc:
    ACK 4b1ce3cac81497dd094e8c34550edf633f4d38ae

Tree-SHA512: 029d55d802f6b4a85f3541f9a23e9ac85e6c590e91081204bfa737169138f61877883db51ad99cd8b802b0737eec35df5a33a5351b3e6b2f180f3ad0282d3616
2024-09-11 13:18:10 -04:00
Pieter Wuille
f15e817811 build: add more CMake presets (dev-mode, libfuzzer, libfuzzer-nosan) 2024-09-11 12:51:34 -04:00
MarcoFalke
fae7b83eb5
lint: Remove forbidden functions from lint-format-strings.py
Given that all of them are forbidden by the
test/lint/lint-locale-dependence.py check, they can be removed.
2024-09-11 16:52:57 +02:00
kevkevinpal
4b1ce3cac8
docs: updated developer notes for --with-sanitizers to -DSANITIZERS and removed resource for -fsanitze flags 2024-09-11 10:26:58 -04:00
Lőrinc
1eac96a503 Compare FromUserHex result against other hex validators and parsers 2024-09-11 15:41:15 +02:00
Lőrinc
19947863e1 Use BOOST_CHECK_EQUAL for optional, arith_uint256, uint256, uint160
Example error before:
> unknown location:0: fatal error: in "validation_chainstatemanager_tests/chainstatemanager_args": std::bad_optional_access: bad_optional_access
test/validation_chainstatemanager_tests.cpp:781: last checkpoint

after:
> test/validation_chainstatemanager_tests.cpp:801: error: in "validation_chainstatemanager_tests/chainstatemanager_args": check set_opts({"-assumevalid=0"}).assumed_valid_block == uint256::ZERO has failed [std::nullopt != 0000000000000000000000000000000000000000000000000000000000000000]

Also added extra minimum_chainwork test to make it symmetric with assumevalid

Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
Co-authored-by: Hodlinator <172445034+hodlinator@users.noreply.github.com>
2024-09-11 15:41:15 +02:00
glozow
0725a37494
Merge bitcoin/bitcoin#30805: test: Add explicit onion bind to p2p_permissions
082779d6062c5b72f3497bb864e4dbb4373a3a4c test: Add explicit onion bind to p2p_permissions (Ava Chow)

Pull request description:

  When the bind option is replaced in the bitcoin.conf, bitcoind will attempd to bind to the default tor listening port. If another bitcoind is running that is already bound to that port, the bind will fail which, since #22729, causes the test to fail.

  This failure can be avoided by explicitly binding the tor port when the bind is removed.

ACKs for top commit:
  tdb3:
    ACK 082779d6062c5b72f3497bb864e4dbb4373a3a4c
  theStack:
    re-ACK 082779d6062c5b72f3497bb864e4dbb4373a3a4c
  glozow:
    ACK 082779d6062c5b72f3497bb864e4dbb4373a3a4c

Tree-SHA512: 4acb69ea2e00aeacf9e7c9ab9595ceaf0e0d2adbd795602034b2184197d9bad54c7bc9f3da43ef9c52a71869fe96ba8c87fc5b7c37880f258f5a2aaab2b4046c
2024-09-10 21:49:47 -04:00
Hennadii Stepanov
0037d53d1a
build: Fix ENABLE_WALLET option
The removed commands were left over from the transition from
autodetection to explicit options. These commands prevented the
`-DENABLE_WALLET=OFF` option from being work properly when building with
depends.
2024-09-10 22:13:09 +01:00
furszy
992f83bb6f
test: add coverage for assumeUTXO honest peers disconnection
Exercising and verifying the following points:

1. An IBD node can sync headers from an AssumeUTXO node at
   any time.

2. IBD nodes do not request historical blocks from AssumeUTXO
   nodes while they are syncing the background-chain.

3. The assumeUTXO node dynamically adjusts the network services
   it offers according to its state.

4. IBD nodes can fully sync from AssumeUTXO nodes after they
   finish the background-chain sync.
2024-09-10 18:08:33 -03:00