Commit graph

41669 commits

Author SHA1 Message Date
fanquake
1bc9f64bee
contrib: assume binary existence in sec/sym checks
If the binaries don't exist, the Guix build has failed for some other
reason.

There's no need to check for unknown architectures, or executable
formats, as the only ones that could be built are those that we've
configured toolchains for in Guix.

We've also been doing this inconsistently across the two scripts.
2024-07-18 14:05:09 +01:00
fanquake
51d8f435c9
contrib: simplify ELF test-security-check 2024-07-18 10:31:05 +01:00
fanquake
1810e20677
contrib: simplify PE test-security-check 2024-07-18 10:31:01 +01:00
fanquake
6c9746ff92
contrib: simplify MACHO test-security-check 2024-07-18 09:49:51 +01:00
Ava Chow
efbf4e71ce
Merge bitcoin/bitcoin#29523: Wallet: Add max_tx_weight to transaction funding options (take 2)
734076c6de [wallet, rpc]: add `max_tx_weight` to tx funding options (ismaelsadeeq)
b6fc5043c1 [wallet]: update the data type of `change_output_size`, `change_spend_size` and `tx_noinputs_size` to `int` (ismaelsadeeq)
baab0d2d43 [doc]: update reason for deducting change output weight (ismaelsadeeq)
7f61d31a5c [refactor]: update coin selection algorithms input parameter `max_weight` name (ismaelsadeeq)

Pull request description:

  This PR taken over from #29264

  The PR added an option `max_tx_weight` to transaction funding RPC's that ensures the resulting transaction weight does not exceed the specified `max_tx_weight` limit.

  If `max_tx_weight` is not given `MAX_STANDARD_TX_WEIGHT` is used as the max threshold.

  This PR addressed outstanding review comments in #29264

  For more context and rationale behind this PR see https://delvingbitcoin.org/t/lightning-transactions-with-v3-and-ephemeral-anchors/418/11?u=instagibbs

ACKs for top commit:
  achow101:
    ACK 734076c6de
  furszy:
    utACK 734076c6de
  rkrux:
    reACK [734076c](734076c6de)

Tree-SHA512: 013501aa443d239ee2ac01bccfc5296490c27b4edebe5cfca6b96c842375e895e5cfeb5424e82e359be581460f8be92095855763a62779a18ccd5bdfdd7ddce7
2024-07-17 18:27:59 -04:00
merge-script
3679fa167f
Merge bitcoin/bitcoin#28893: Fix SSE4.1-related issues
d440f13db0 crypto: Guard code with `ENABLE_SSE41` macro (Hennadii Stepanov)
6ec1ca7c85 build: Fix test for SSE4.1 intrinsics (Hennadii Stepanov)

Pull request description:

  1. Fix the test for SSE4.1 intrinsics during build system configuration, which currently can be false positive, for example, when `CXXFLAGS="-mno-sse4.1"` provided.

  This PR fixes the test by adding the `_mm_blend_epi16` SSE4.1 function used in our codebase.

  2. Guard `sha_x86_shani.cpp` code with `ENABLE_SSE41` macro as it uses the `_mm_blend_epi16` function from
  the SSE4.1 instruction set.

  It is possible that SHA-NI is enabled even when SSE4.1 is disabled, which causes compile errors in the master branch.

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

ACKs for top commit:
  sipa:
    utACK d440f13db0
  willcl-ark:
    tACK d440f13db0
  theuni:
    utACK d440f13db0

Tree-SHA512: a6e1e8c94e1b94874ff51846815ef445e6135cbdb01b08eb695b3548115f2340dd835ebe53673ae46a553fe6be4815e68d8642c34235dd7af5106c4b7c9ea6f3
2024-07-17 16:58:54 +01:00
merge-script
5f5862f382
Merge bitcoin/bitcoin#30468: test: bump mocktime only after node has received and sent bytes
c322bddd08 test: bump mocktime after node has received and sent bytes (stratospher)

Pull request description:

  Fixes an intermittent failure for `p2p_v2_misbehaving.py` reported in https://github.com/bitcoin/bitcoin/pull/30420#discussion_r1680462164.

  A [different error message](262260ce1e/src/net.cpp (L1970)) `"socket no message in first %i seconds"` will be displayed if `m_last_send=0` or if `m_last_recv is 0`.  Fix this by:
  1. mocktime bump is done after all the bytes are received. (`m_last_recv is not 0 now`)
  2. wait until bytes are sent by `TestNode`/`bitcoind` (`m_last_send is not 0 now`)

  See https://cirrus-ci.com/task/5359619151757312?logs=ci#L3935 for an example failure (I wasn't able to reproduce the intermittent failure locally but I think the fix is logical)

ACKs for top commit:
  maflcko:
    reACK c322bddd08

Tree-SHA512: 1c05524c2819041eb2001c2baf2c912d4f812a39347f784f212634e8c53131357a73116a46b4b7542bc7fc8c1370c4d36fc9898a2cbdb40bcee61105123c4a35
2024-07-17 16:11:08 +01:00
merge-script
bfce85d135
Merge bitcoin/bitcoin#30466: refactor: Make m_last_notified_header private
fa927055dd refactor: Make m_last_notified_header private (MarcoFalke)

Pull request description:

  Seems brittle to expose mutable fields public.

  Fix it by making it private.

  Fixes https://github.com/bitcoin/bitcoin/pull/30425#discussion_r1677633601

ACKs for top commit:
  dergoegge:
    utACK fa927055dd

Tree-SHA512: d9841c42571144ced0edeaa4bb1d96a177a011dca37c8342c66513477c37278602a1b88beb93068b94fc4443b1552c8fc9f98bcf0bda7d0fc101e61e90c33944
2024-07-17 15:53:33 +01:00
merge-script
37992244e6
Merge bitcoin/bitcoin#30457: doc: getaddressinfo[isscript] is optional
fa6390df20 doc: getaddressinfo[isscript] is optional (MarcoFalke)

Pull request description:

  `isscript` is unknown for unknown witness versions, so it should be marked optional in the docs

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

ACKs for top commit:
  stickies-v:
    ACK fa6390df20
  tdb3:
    ACK fa6390df20

Tree-SHA512: f728f18e0871923225e0bf29594f8095997456cf55409f42087b5f70f95bef10f984323b48d2b484b6705f23b04e9e8a3fe42446830638fdd70453c18fd7f189
2024-07-17 13:58:34 +01:00
stratospher
c322bddd08 test: bump mocktime after node has received and sent bytes
a different error message "socket no message in first %i seconds"
will be displayed if m_last_send=0 or if m_last_recv is 0. make
the test robust by ensuring that they will not be 0 before
bumping mocktime.
2024-07-17 17:56:19 +05:30
MarcoFalke
fa927055dd
refactor: Make m_last_notified_header private 2024-07-17 09:12:28 +02:00
MarcoFalke
fa6390df20
doc: getaddressinfo[isscript] is optional 2024-07-17 06:51:58 +02:00
Ava Chow
6f9db1ebca
Merge bitcoin/bitcoin#30357: Fix cases of calls to FillPSBT errantly returning complete=true
7e36dca657 test: add test for modififed walletprocesspsbt calls (willcl-ark)
39cea21ec5 wallet: fix FillPSBT errantly showing as complete (willcl-ark)

Pull request description:

  Fixes: #30077

  Fix cases of calls to `FillPSBT` returning `complete=true` when it's not
  the case.

  This can happen when some inputs have been signed but the transaction is
  subsequently modified, e.g. in the context of PayJoins.

  Also fixes a related bug where a finalized hex string is attempted to be
  added during `walletprocesspsbt` but a CHECK_NONFATAL causes an abort.

ACKs for top commit:
  achow101:
    ACK 7e36dca657
  ismaelsadeeq:
    Tested ACK 7e36dca657
  pinheadmz:
    re-ACK 7e36dca657

Tree-SHA512: e35d19789899c543866d86d513506494d672e4bed9aa36a995dbec4e72f0a8ec5536b57c4a940a18002ae4a8efd0b007c77ba64e57cd52af98e4ac0e7bf650d6
2024-07-16 17:10:19 -04:00
Ava Chow
45750f61d6
Merge bitcoin/bitcoin#22729: Make it possible to disable Tor binds and abort startup on bind failure
bca346a970 net: require P2P binds to succeed (Vasil Dimov)
af552534ab net: report an error if unable to bind on the Tor listening addr:port (Vasil Dimov)
9a7e5f4d68 net: don't extra bind for Tor if binds are restricted (Vasil Dimov)

Pull request description:

  Make it possible to disable the Tor binding on `127.0.0.1:8334` and stop startup if any P2P bind fails instead of "if all P2P binds fail".

  Fixes https://github.com/bitcoin/bitcoin/issues/22726
  Fixes https://github.com/bitcoin/bitcoin/issues/22727

ACKs for top commit:
  achow101:
    ACK bca346a970
  cbergqvist:
    ACK bca346a970
  pinheadmz:
    ACK bca346a970

Tree-SHA512: fabef89a957191eea4f3e3b6109d2b8389f27ecc74440a920b0c10f31fff00a85bcfd1eb3c91826c7169c618f4de8a8d0a260e2caf40fd854f07ea9a980d8603
2024-07-16 16:27:24 -04:00
Ava Chow
16b4f75d04
Merge bitcoin/bitcoin#28923: script/sign: avoid duplicated signature verification after signing (+introduce signing benchmarks)
fe92c15f0c script/sign: avoid duplicated signature verification after signing (Sebastian Falbesoner)
080089567c bench: add benchmark for `SignTransaction` (Sebastian Falbesoner)

Pull request description:

  This PR is a small performance improvement on the `SignTransaction` function, which is used mostly by the wallet (obviously) and the `signrawtransactionwithkey` RPC. The lower-level function `ProduceSignature` already calls `VerifyScript` internally as last step in order to check whether the signature data is complete:
  daa56f7f66/src/script/sign.cpp (L568-L570)

  If and only if that is the case, the `complete` field of the `SignatureData` is set to `true` accordingly and there is no need then to verify the script after again, as we already know that it would succeed.

  This leads to a rough ~20% speed-up for `SignTransaction` for single-input ECDSA or Taproot transactions, according to the newly introduced `SignTransaction{ECDSA,Taproot}` benchmarks:

  ```
  $ ./src/bench/bench_bitcoin --filter=SignTransaction.*
  ```

  without commit 18185f4f578b8795fdaa75926630a691e9c8d0d4:

  |               ns/op |                op/s |    err% |     total | benchmark
  |--------------------:|--------------------:|--------:|----------:|:----------
  |          185,597.79 |            5,388.00 |    1.6% |      0.22 | `SignTransactionECDSA`
  |          141,323.95 |            7,075.94 |    2.1% |      0.17 | `SignTransactionSchnorr`

  with commit 18185f4f578b8795fdaa75926630a691e9c8d0d4:

  |               ns/op |                op/s |    err% |     total | benchmark
  |--------------------:|--------------------:|--------:|----------:|:----------
  |          149,757.86 |            6,677.45 |    1.4% |      0.18 | `SignTransactionECDSA`
  |          108,284.40 |            9,234.94 |    2.0% |      0.13 | `SignTransactionSchnorr`

  Note that there are already signing benchmarks in the secp256k1 library, but `SignTransaction` does much more than just the cryptographical parts, i.e.:
  * calculate the unsigned tx's `PrecomputedTransactionData` if necessary
  * apply Solver on the prevout scriptPubKey, fetch the relevant keys from the signing provider
  * perform the actual signing operation (for ECDSA signatures, that could be more than once due to low-R grinding)
  * verify if the signatures are correct by calling `VerifyScript` (more than once currently, which is fixed by this PR)

  so it probably makes sense to also have benchmarks from that higher-level application perspective.

ACKs for top commit:
  achow101:
    ACK fe92c15f0c
  furszy:
    utACK fe92c15f0c
  glozow:
    light review ACK fe92c15f0c

Tree-SHA512: b7225ff9e8a640ca5222dea5b2a463a0f9b9de704e4330b5b9a7bce2d63a1f4620575c474a8186f4708d7d9534eab55d000393d99db79c0cfc046b35f0a4a778
2024-07-16 16:19:07 -04:00
Ava Chow
ad5579e056
Merge bitcoin/bitcoin#30429: rpc: Use CHECK_NONFATAL over Assert
fa6270737e rpc: Use CHECK_NONFATAL over Assert (MarcoFalke)

Pull request description:

  Any RPC method should not abort the whole node when an internal logic error happens.

  Fix it by just aborting this single RPC method call when an error happens.

  Also, fix the linter to find the fixed cases.

ACKs for top commit:
  achow101:
    ACK fa6270737e
  stickies-v:
    ACK fa6270737e
  tdb3:
    ACK fa6270737e
  hodlinator:
    ACK fa6270737e

Tree-SHA512: dad2f31b01a66578949009499e4385fb4d72f0f897419f2a6e0ea02e799b9a31e6ecb5a67fa5d27fcbc7939fe8acd62dc04e877b35831493b7f2c604dec7dc64
2024-07-16 16:00:33 -04:00
merge-script
1d24d383b4
Merge bitcoin/bitcoin#30435: init: change shutdown order of load block thread and scheduler
5fd4836019 init: change shutdown order of load block thread and scheduler (Martin Zumsande)

Pull request description:

  This avoids situations during a reindex, in which the shutdown doesn't finish since `LimitValidationInterfaceQueue()` is called by the load block thread when the scheduler is already stopped, in which case it would block indefinitely. This can lead to intermittent failures in `feature_reindex.py` (#30424), which I could locally reproduce with
  ```diff
  diff --git a/src/validation.cpp b/src/validation.cpp
  index 74f0e4975c..be1706fdaf 100644
  --- a/src/validation.cpp
  +++ b/src/validation.cpp
  @@ -3446,6 +3446,7 @@ static void LimitValidationInterfaceQueue(ValidationSignals& signals) LOCKS_EXCL
       AssertLockNotHeld(cs_main);

       if (signals.CallbacksPending() > 10) {
  +        std::this_thread::sleep_for(std::chrono::milliseconds(50));
           signals.SyncWithValidationInterfaceQueue();
       }
   }
  ```
  It has also been reported by users running `reindex-chainstate` (#23234).

  I thought for a bit about potential downsides of changing this order, but couldn't find any.

  Fixes #30424
  Fixes #23234

ACKs for top commit:
  maflcko:
    review ACK 5fd4836019
  hebasto:
    re-ACK 5fd4836019.
  tdb3:
    ACK 5fd4836019
  BrandonOdiwuor:
    Code Review ACK 5fd4836019

Tree-SHA512: 3b8894e99551c5d4392b55eaa718eee05841a7287aeef2978699e1d633d5234399fa2f5a3e71eac1508d97845906bd33e0e63e5351855139e7be04c421359b36
2024-07-16 17:31:59 +01:00
merge-script
24dffdde7b
Merge bitcoin/bitcoin#29072: build: use -no_exported_symbols on macOS
81d4dc8e87 build: use -no_exported_symbols on macOS (fanquake)

Pull request description:

  This reduces the size of the binary by ~1% when building with `--enable-reduce-exports`.

  > -no_exported_symbols
  > Useful for main executable that don't have plugins and thus need no symbol exports.

  Can be tested with `dyld_info -exports src/bitcoind`. The only exported symbol should be `__mh_execute_header`.

ACKs for top commit:
  theuni:
    utACK 81d4dc8e87
  hebasto:
    ACK 81d4dc8e87.

Tree-SHA512: ae46065a05d190753ba807943c0734a06cfe6d2cf9eaf3c3aa93250bf8639da8bc53b81c6b0390e6d572a74c6bb31a695f8c5924810bfa358a3c9b08caff03f7
2024-07-16 15:49:12 +01:00
Ryan Ofsky
4687832680
Merge bitcoin/bitcoin#30425: kernel: De-globalize static validation variables
51fa26239a refactor: Mark some static global vars as const (TheCharlatan)
39f9b80fba refactor: De-globalize last notified header index (TheCharlatan)
3443943f86 refactor: De-globalize validation benchmark timekeeping (TheCharlatan)

Pull request description:

  In future, users of the kernel library might run multiple chainstates in parallel, or create and destroy multiple chainstates over the lifetime of a process. Having static, mutable variables could lead to state inconsistencies in these scenarios.

  ---
  This pull request is part of the [libbitcoinkernel project](https://github.com/bitcoin/bitcoin/issues/27587).

ACKs for top commit:
  dergoegge:
    Code review ACK 51fa26239a
  maflcko:
    ACK 51fa26239a 🍚
  tdb3:
    code review ACK 51fa26239a

Tree-SHA512: da91aa7ffa343325cabb8764ef03c8358845662cf0ba8a6cc1dd38e40e5462d88734f2b459c2de8e7a041551eda9143d92487842609f7f30636f61a0cd3c57ee
2024-07-16 10:14:23 -04:00
merge-script
1db0be8353
Merge bitcoin/bitcoin#28263: Add fuzz test for FSChaCha20Poly1305, AEADChacha20Poly1305
8607773750 Add fuzz test for FSChaCha20Poly1305 (stratospher)
c807f33228 Add fuzz test for AEADChacha20Poly1305 (stratospher)

Pull request description:

  This PR adds fuzz tests for `AEADChaCha20Poly1305` and `FSChaCha20Poly1305` introduced in #28008.

  Run using:
  ```
  $ FUZZ=crypto_aeadchacha20poly1305 src/test/fuzz/fuzz
  $ FUZZ=crypto_fschacha20poly1305 src/test/fuzz/fuzz
  ```

ACKs for top commit:
  dergoegge:
    tACK 8607773750
  marcofleon:
    Tested ACK 8607773750. Ran both targets for ~200 CPU hours. Coverage of intended targets looks good to me. The simulation of damaged keys and checks that follow seem useful as well.

Tree-SHA512: b6b85661d896e653caeed330f941fde665fc2bbd97ecd340808a3f365c469fe9134aa77316569a771dc36d1158cac1a5f76700bcfc45fff12aef07562e48feb9
2024-07-16 12:13:02 +01:00
merge-script
5f538f2a7c
Merge bitcoin/bitcoin#30387: contrib: use c++ compiler rather than c compiler for binary checks
9010b1343b contrib: c++ify test stubs after switching to c++ compilers (Cory Fields)
261f770333 contrib: rename cc to cxx in binary checking scripts (Cory Fields)
a38c960005 contrib: use c++ rather than c for binary tests (Cory Fields)

Pull request description:

  From hebasto's CMake repo. See discussion here: https://github.com/hebasto/bitcoin/pull/252#discussion_r1664657488

  Use CXX/CXXFLAGS rather than CC/CFLAGS to test our actual compiler for binary checks rather than the one we only forward to secp256k1.

ACKs for top commit:
  hebasto:
    ACK 9010b1343b.
  fanquake:
    ACK 9010b1343b

Tree-SHA512: 7b8788d7d3760103062eff10056c995e1ad14c0c487d9414683ad54d816c255d0ca751f4d0e2d2ad7f9e8a7101d8c7f1e9333fa5b137558ed68fa593c4b4ce6d
2024-07-16 09:48:11 +01:00
glozow
35dddbccf1
Merge bitcoin/bitcoin#30394: net: fix race condition in self-connect detection
16bd283b3a Reapply "test: p2p: check that connecting to ourself leads to disconnect" (Sebastian Falbesoner)
0dbcd4c148 net: prevent sending messages in `NetEventsInterface::InitializeNode` (Sebastian Falbesoner)
66673f1c13 net: fix race condition in self-connect detection (Sebastian Falbesoner)

Pull request description:

  This PR fixes a recently discovered race condition in the self-connect detection (see #30362 and #30368).

  Initiating an outbound network connection currently involves the following steps after the socket connection is established (see [`CConnman::OpenNetworkConnection`](bd5d1688b4/src/net.cpp (L2923-L2930)) method):
  1. set up node state
  2. queue VERSION message (both steps 1 and 2 happen in [`InitializeNode`](bd5d1688b4/src/net_processing.cpp (L1662-L1683)))
  3. add new node to vector `m_nodes`

  If we connect to ourself, it can happen that the sent VERSION message (step 2) is received and processed locally *before* the node object is added to the connection manager's `m_nodes` vector (step 3). In this case, the self-connect remains undiscovered, as the detection doesn't find the outbound peer in `m_nodes` yet (see `CConnman::CheckIncomingNonce`).

  Fix this by swapping the order of 2. and 3., by taking the `PushNodeVersion` call out of `InitializeNode` and doing that in the `SendMessages` method instead, which is only called for `CNode` instances in `m_nodes`.

  The temporarily reverted test introduced in #30362 is readded. Fixes #30368.

  Thanks go to vasild, mzumsande and dergoegge for suggestions on how to fix this (see https://github.com/bitcoin/bitcoin/issues/30368#issuecomment-2200625017 ff. and https://github.com/bitcoin/bitcoin/pull/30394#discussion_r1668290789).

ACKs for top commit:
  naiyoma:
    tested ACK [16bd283b3a),  built and tested locally,  test passes successfully.
  mzumsande:
    ACK 16bd283b3a
  tdb3:
    ACK 16bd283b3a
  glozow:
    ACK 16bd283b3a
  dergoegge:
    ACK 16bd283b3a

Tree-SHA512: 5b8aced6cda8deb38d4cd3fe4980b8af505d37ffa0925afaa734c5d81efe9d490dc48a42e1d0d45dd2961c0e1172a3d5b6582ae9a2d642f2592a17fbdc184445
2024-07-16 09:40:53 +01:00
merge-script
d41f4a69e7
Merge bitcoin/bitcoin#30420: test: Fix intermittent failure in p2p_v2_misbehaving.py
c6d43367a1 test: Fix intermittent failure in p2p_v2_misbehaving.py (stratospher)

Pull request description:

  Fixes #30419.

  Make sure that ellswift computation is complete in the `NetworkThread` in `test/functional/p2p_v2_misbehaving.py` before sending the ellswift in the `MainThread`.

  One way to reproduce this failure on master would be:

  ```diff
  diff --git a/test/functional/test_framework/v2_p2p.py b/test/functional/test_framework/v2_p2p.py
  index 87600c36de..ea0615ef3b 100644
  --- a/test/functional/test_framework/v2_p2p.py
  +++ b/test/functional/test_framework/v2_p2p.py
  @@ -111,6 +111,7 @@ class EncryptedP2PState:

       def generate_keypair_and_garbage(self, garbage_len=None):
           """Generates ellswift keypair and 4095 bytes garbage at max"""
  +        import time; time.sleep(3)
           self.privkey_ours, self.ellswift_ours = ellswift_create()
           if garbage_len is None:
               garbage_len = random.randrange(MAX_GARBAGE_LEN + 1)

  ```

ACKs for top commit:
  maflcko:
    ACK c6d43367a1
  mzumsande:
    Code Review ACK c6d43367a1
  tdb3:
    cr and t ACK c6d43367a1

Tree-SHA512: dfc3a6afa09773b7e84d35aff0aa14e0b8a4475860e0b31ab5c1a8d54911c814f07138f624fea651fba90cc5c526c0d05c3fe33d2ce0ad833b2be3a3caa9f522
2024-07-16 08:58:42 +01:00
Ryan Ofsky
8426e018bf
Merge bitcoin/bitcoin#30428: log: LogError with FlatFilePos in UndoReadFromDisk
fa14e1d9d5 log: Fix __func__ in LogError in blockstorage module (MarcoFalke)
fad59a2f0f log: LogError with FlatFilePos in UndoReadFromDisk (MarcoFalke)
aaaa3323f3 refactor: Mark IsBlockPruned const (MarcoFalke)

Pull request description:

  These errors should never happen in normal operation. If they do,
  knowing the `FlatFilePos` may be useful to determine if data corruption
  happened. Also, handle the error `pos.IsNull()` as part of `OpenUndoFile`,
  because it may as well have happened due to data corruption.

  This mirrors the `LogError` behavior from `ReadBlockFromDisk`.

  Also, two other fixup commits in this module.

ACKs for top commit:
  kevkevinpal:
    ACK [fa14e1d](fa14e1d9d5)
  tdb3:
    cr and light test ACK fa14e1d9d5
  ryanofsky:
    Code review ACK fa14e1d9d5. This should make logging clearer and more consistent

Tree-SHA512: abb492a919b4796698d1de0a7874c8eae355422b992aa80dcd6b59c2de1ee0d2949f62b3cf649cd62892976fee640358f7522867ed9d48a595d6f8f4e619df50
2024-07-15 13:42:53 -04:00
merge-script
ff827a8f46
Merge bitcoin/bitcoin#30407: test: [refactor] Pass TestOpts
fa690c8e53 test: [refactor] Pass TestOpts (MarcoFalke)

Pull request description:

  Currently optional test context setup settings are passed by adding a new optional argument to the constructors. For example `extra_args`. This is problematic, because:

  * Adding more optional settings in the future requires touching all affected constructors, increasing their verbosity.
  * Setting only a later option requires setting the earlier ones.
  * Clang-tidy named args passed to `std::make_unique` are not checked.

  Fix all issues by adding a new struct `TestOpts`, which holds all options. Notes:

  * The chain type is not an option in the struct for now, because the default values vary.
  * The struct holds all possible test options globally. Not all fields may be used by all constructors. Albeit harmless, it is up to the test author to not set a field that is unused.

ACKs for top commit:
  kevkevinpal:
    utACK [fa690c8](fa690c8e53)
  dergoegge:
    utACK fa690c8e53
  TheCharlatan:
    Nice, ACK fa690c8e53

Tree-SHA512: 8db8efa5dff854a73757d3f454f8f902e41bb4358f5f9bae29dbb3e251e20ee93489605de51d0822ba31d97835cd15526a29c075278dd6a8bbde26134feb4f49
2024-07-15 17:21:55 +01:00
stratospher
c6d43367a1 test: Fix intermittent failure in p2p_v2_misbehaving.py
The ellswift bytes are computed in the NetworkThread and sent in
the MainThread. Add a `wait_until()` to make sure that ellswift
computation is completed in NetworkThread before sending it in
the MainThread. Also wait until bytes sent are actually received
and use mocktime for more robust disconnection checking.
2024-07-15 20:51:05 +05:30
merge-script
262260ce1e
Merge bitcoin/bitcoin#30197: fuzz: bound some miniscript operations to avoid fuzz timeouts
bc34bc2888 fuzz: limit the number of nested wrappers in descriptors (Antoine Poinsot)
8d7340105f fuzz: limit the number of sub-fragments per fragment for descriptors (Antoine Poinsot)

Pull request description:

  Some of the logic in the miniscript module is quadratic. It only becomes an issue for very large uninteresting descriptors (like a `thresh` with 130k sub-fragments or a fragment with more than 60k nested `j:` wrappers).

  This PR fixes the two types of fuzz timeouts reported by Marco in https://github.com/bitcoin/bitcoin/issues/28812 by trying to pinpoint the problematic descriptors through a simple analysis of the string, without limiting the size of the string itself. This is the same approach as was adopted for limiting the depth of derivation paths.

ACKs for top commit:
  dergoegge:
    utACK bc34bc2888
  stickies-v:
    Light ACK bc34bc2888
  marcofleon:
    Code review ACK bc34bc2888. The added comments are useful, thanks for those. Tested on the three inputs in https://github.com/bitcoin/bitcoin/issues/28812 that caused the timeouts.

Tree-SHA512: 8811c7b225684c5ecc1eb1256cf39dfa60d4518161e70210086c8a01b38927481ebe747af86aa5f4803187672d43fadabcfdfbf4e3b049738d629a25143f0e77
2024-07-15 14:11:14 +01:00
stratospher
8607773750 Add fuzz test for FSChaCha20Poly1305 2024-07-15 18:26:45 +05:30
stratospher
c807f33228 Add fuzz test for AEADChacha20Poly1305 2024-07-15 18:25:59 +05:30
Hennadii Stepanov
84063a4c4c
Merge bitcoin-core/gui#827: OptionsDialog: Prefer to stretch actual options area rather than waste space
b71bfd9eef GUI/OptionsDialog: Prefer to stretch actual options area rather than waste space (Luke Dashjr)

Pull request description:

ACKs for top commit:
  hebasto:
    ACK b71bfd9eef

Tree-SHA512: b706a07292fe81379e303f9069fca6efd5ceb15ee5bb77c6aeddbf63f736494ce877b76767ff17d7becf98d07209e51c74bdb99365596b7b9f4904a30438d72d
2024-07-15 12:15:09 +01:00
merge-script
35102d4928
Merge bitcoin/bitcoin#30373: fuzz: fix key size in crypter
4383dc90ba fuzz: fix key size in crypter target (brunoerg)

Pull request description:

  Fixes #30251

  This PR:
  1. Limits `cipher_text_ed` and `random_string` (`SecureString`) size.
  2. Replace `ConsumeRandomLengthByteVector` for keys to `ConsumeFixedLengthByteVector` with `WALLET_CRYPTO_KEY_SIZE`.
  3. Replace `ConsumeRandomLengthByteVector` for `chSalt` to `ConsumeFixedLengthByteVector` with `WALLET_CRYPTO_SALT_SIZE`.

ACKs for top commit:
  marcofleon:
    Tested ACK 4383dc90ba. I ran this:
  dergoegge:
    utACK 4383dc90ba

Tree-SHA512: 6f09cca0b4627f49152b685ac03659c01004f2131c6aada7654606ea01f6619b1611b1d17624d2cddce277c1afdddda5f656d99f6ca8f72a22f5c0541762c964
2024-07-15 11:40:11 +01:00
Hennadii Stepanov
6ae903e24a
Merge bitcoin-core/gui#795: Keep focus on "Hide" while ModalOverlay is visible
992b1bbd5d qt: keep focus on "Hide" while ModalOverlay is visible (Jadi)

Pull request description:

  During the initial sync, the Tab moves the focus to the widgets of the main window, even when the ModalOverlay is visible. This creates some weird rectangular *selections on the screen*.

  This PR fixes this by keeping the focus on the "Hide" button while the ModalOverlay is visible.

  Fixes #783

ACKs for top commit:
  pablomartin4btc:
    Concept & approach ACK 992b1bbd5d
  hebasto:
    re-ACK 992b1bbd5d

Tree-SHA512: f702a3fd51db4bc10780bccf76394e35a6b5fb45db72c9c23cd10d777106b08c61077d2d989003838921e76d2cb44f809399f31df76448e4305a6c2a71b5c6a3
2024-07-15 10:47:09 +01:00
merge-script
01ed4927f0
Merge bitcoin/bitcoin#30412: MiniMiner: use FeeFrac in AncestorFeerateComparator
09370529fb fuzz: mini_miner_selection fixups. (glozow)
de273d5300 MiniMiner: use FeeFrac in AncestorFeerateComparator (glozow)

Pull request description:

  Closes #30284. Closes #30367, see https://github.com/bitcoin/bitcoin/issues/30367#issuecomment-2217459257

  Previously, we were only comparing feerates up to 1/1000 precision, since CFeeRate comparison just looks at their respective nSatoshisPerK. This could lead to MiniMiner selecting packages in the wrong order (i.e. by txid) if their feerates were less than 0.001sat/vB different. Fix this by creating + comparing `FeeFrac`s instead.

  Also, `FeeFrac::Mul` doesn't have the overflow problem.

  Also added a few minor fuzzer fixups that caught my eye while I was debugging this.

ACKs for top commit:
  ismaelsadeeq:
    Tested ACK 09370529fb
  murchandamus:
    ACK 09370529fb with nits
  dergoegge:
    tACK 09370529fb

Tree-SHA512: e5b6d6c3f7289f30cd8280d0a47cd852d0180b83d1b27ff9514f50c97103b0f069484e48cba2ca3a57419beadc1996c1b9dd8d0a0f34bc4f4223d8adaf414ce5
2024-07-15 09:59:44 +01:00
Antoine Poinsot
bc34bc2888
fuzz: limit the number of nested wrappers in descriptors
The script building logic performs a quadratic number of copies in the
number of nested wrappers in the miniscript. Limit the number of nested
wrappers to avoid fuzz timeouts.

Thanks to Marco Falke for reporting the fuzz timeouts and providing a
minimal input to reproduce.
2024-07-14 17:47:40 +02:00
Antoine Poinsot
8d7340105f
fuzz: limit the number of sub-fragments per fragment for descriptors
This target may call into logic quadratic over the number of
sub-fragments. Limit the number of sub-fragments to keep the runtime
reasonable.

Thanks to Marco Falke for reporting the fuzz timeouts with a minimized
input.
2024-07-14 17:46:40 +02:00
Hennadii Stepanov
ff100bb549
Merge bitcoin-core/gui#825: Show maximum mempool size in information window
4a028cf54c gui: show maximum mempool size in information window (Sebastian Falbesoner)
bbde6ffefe add node interface method for getting maximum mempool size (Sebastian Falbesoner)

Pull request description:

  This PR adds the maximum mempool size to the information window (Menu "Window" -> "Information" -> section "Memory Pool" -> line "Memory usage").

  master:

  ![image](https://github.com/bitcoin-core/gui/assets/91535/157e92f5-7d06-4303-b4ef-bcdfac5527e3)

  PR:

  ![image](https://github.com/bitcoin-core/gui/assets/91535/796322aa-9f16-4b09-9893-bf52a3898a5c)

ACKs for top commit:
  MarnixCroes:
    tested ACK 4a028cf54c
  pablomartin4btc:
    tACK 4a028cf54c
  luke-jr:
    tACK 4a028cf54c & in Knots
  hebasto:
    ACK 4a028cf54c, tested on Ubuntu 24.04.

Tree-SHA512: c10fb23605d060cea19a86d11822fc4d12496b19547870052aace503670e62e4c4e19ae4c2c4fbf7420a472adb071c9ddebe82447e0cfbce5a6fb9fcd7b9eda3
2024-07-14 13:07:44 +01:00
merge-script
c4d45b695e
Merge bitcoin/bitcoin#30295: #28984 package rbf followups
3f00aae140 package rbf: cpfp structure requires package > parent feerate (Greg Sanders)
ad7f1f697f test package rbf boundary conditions more closely (Greg Sanders)
ff4558d441 doc: reword package RBF documentation (Greg Sanders)
de669a883b doc: replace mention of V3 with TRUC (Greg Sanders)

Pull request description:

  Some suggested nits/changes from #28984

ACKs for top commit:
  glozow:
    ACK 3f00aae140
  murchandamus:
    ACK 3f00aae140

Tree-SHA512: 79434cc8aba25a43e99793298cdc99cad807db2c3a2e780a31953f244b95eecd97b90559abd67fbf30996c00966675fa257253a7812ec4727420226162c629ae
2024-07-12 17:15:27 +01:00
Martin Zumsande
5fd4836019 init: change shutdown order of load block thread and scheduler
This avoids situations during a reindex in which shutdown
doesn't finish since SyncWithValidationInterfaceQueue is
called by the load block thread when the scheduler is already stopped.
2024-07-12 11:47:50 -04:00
merge-script
4d6af61d87
Merge bitcoin/bitcoin#30372: util: Use SteadyClock in RandAddSeedPerfmon
fa360b047f util: Use SteadyClock in RandAddSeedPerfmon (MarcoFalke)

Pull request description:

  `GetTime` is mockable in tests and system-changeable in production. This should be fine and not lead to issues, but using `SteadyClock` is more correct in this context to do an expensive task only so often.

ACKs for top commit:
  sipa:
    utACK fa360b047f
  TheCharlatan:
    ACK fa360b047f

Tree-SHA512: 1958b9e9e356c9801ac981014b4b528cfc8ce6612853d8b45f6519b16f0b1839ff765abb8b3368b86f00958ddc6a686f6b90278c57a7ad4858bdf3ea33775cca
2024-07-12 10:28:43 +01:00
merge-script
66114cd45b
Merge bitcoin/bitcoin#30336: depends: update doc in Qt pwd patch
f170fe04ca depends: update doc in Qt pwd patch (fanquake)

Pull request description:

  Now that upstream has gotten around to fixing this. We don't need any more of the patch, and it likely wont apply to our version of Qt in any case. See: 3388de698b.

ACKs for top commit:
  theuni:
    ACK f170fe04ca

Tree-SHA512: f6db8ccad591b1bf144ce71f873f42a115d394c432a95b6b855e3e32751e6331145e0d9676657599b25fd369af8c72c1bd34e192a7a1062c15f152421422a9ed
2024-07-12 09:40:32 +01:00
MarcoFalke
fa6270737e
rpc: Use CHECK_NONFATAL over Assert 2024-07-12 09:27:41 +02:00
Ava Chow
33af14e31b
Merge bitcoin/bitcoin#30353: test: fix inconsistency in fundrawtransaction weight limits test
00b8e26bd6 test: fix inconsistency in fundrawtransaction weight limits test (furszy)

Pull request description:

  Fix https://github.com/bitcoin/bitcoin/pull/30309#discussion_r1657628378 inconsistency.

  Currently, the test is passing due to a mistake in the test inputs
  selection process. We are selecting the parent transaction change
  output as one of the inputs of the transaction to fund, which
  helps to surpass the target amount when it shouldn't due to the
  fee reduction.

  The failure arises when the test behaves as intended by its coder;
  that is, when it does not select the change output. In this case,
  the pre-selected inputs aren't enough to cover the target amount.

  Fix this by excluding the parent transaction's change output from
  the inputs selection and including an extra input to cover the tx
  fee.

  The CI failure can be replicated with the following patch in master:

  ```diff
  diff --git a/test/functional/wallet_fundrawtransaction.py b/test/functional/wallet_fundrawtransaction.py
  --- a/test/functional/wallet_fundrawtransaction.py(revision 9b480f7a25)
  +++ b/test/functional/wallet_fundrawtransaction.py(date 1720652934739)
  @@ -1322,7 +1322,7 @@
           outputs = []
           for _ in range(1472):
               outputs.append({wallet.getnewaddress(address_type="legacy"): 0.1})
  -        txid = self.nodes[0].send(outputs=outputs)["txid"]
  +        txid = self.nodes[0].send(outputs=outputs, change_position=0)["txid"]
           self.generate(self.nodes[0], 1)

           # 272 WU per input (273 when high-s); picking 1471 inputs will exceed the max standard tx weight.
  @@ -1330,7 +1330,7 @@

           # 1) Try to fund transaction only using the preset inputs
           input_weights = []
  -        for i in range(1471):
  +        for i in range(1, 1472):  # skip first output as it is the parent tx change output
               input_weights.append({"txid": txid, "vout": i, "weight": 273})
           assert_raises_rpc_error(-4, "Transaction too large", wallet.fundrawtransaction, hexstring=rawtx, input_weights=input_weights)
  ```

ACKs for top commit:
  achow101:
    ACK 00b8e26bd6
  ismaelsadeeq:
    Code review and Tested ACK 00b8e26bd6

Tree-SHA512: 5ef792961b7fad4999fc30aa03366432103ddf672ca5cbb366c9eab4c2e46d5ae1ab0c073dfc4fbb2b4e63203653bc0e54463c731c5f8655140207ba5f8e542e
2024-07-11 15:08:13 -04:00
merge-script
00feabf6c5
Merge bitcoin/bitcoin#30234: Enable clang-tidy checks for self-assignment
26a7f70b5d ci: enable self-assignment clang-tidy check (Cory Fields)
32b1d13792 refactor: add self-assign checks to classes which violate the clang-tidy check (Cory Fields)

Pull request description:

  See comment here: https://github.com/bitcoin/bitcoin/pull/30161#issuecomment-2148229582

  Our code failed these checks in three places, which have been fixed up here. Though these appear to have been harmless, adding the check avoids the copy in the self-assignment case so there should be no downside.

  ~Additionally, minisketch failed the check as well. See https://github.com/sipa/minisketch/pull/87~
  Edit: Done

  After fixing up the violations, turn on the aggressive clang-tidy check.

  Note for reviewers: `git diff -w` makes this trivial to review.

ACKs for top commit:
  hebasto:
    ACK 26a7f70b5d, I have reviewed the code and it looks OK.
  TheCharlatan:
    ACK 26a7f70b5d

Tree-SHA512: 74d8236a1b5a698f2f61c4740c4fc77788b7f882c4b395acc4e6bfef1ec8a4554ea8821a26b14d70cfa6c8e2e9ea305deeea3fbf323967fa19343c007a53c5ba
2024-07-11 19:21:05 +01:00
merge-script
01dc38bd01
Merge bitcoin/bitcoin#30406: refactor: modernize-use-equals-default
3333bae9b2 tidy: modernize-use-equals-default (MarcoFalke)

Pull request description:

  Prior to C++20, `modernize-use-equals-default` could have been problematic because it could turn a non-aggregate into an aggregate. The risk would be that aggregate initialization would be enabled where the author did not intend to enable it.

  With C++20, aggregate for those is forbidden either way. (https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1008r1.pdf)

  So enabled it for code clarity, consistency, and possibly unlocking compiler optimizations. See https://clang.llvm.org/extra/clang-tidy/checks/modernize/use-equals-default.html

ACKs for top commit:
  stickies-v:
    ACK 3333bae9b2

Tree-SHA512: ab42ff01be7ca7e7d8b4c6a485e68426f59627d83dd827cf292304829562348dc17a52ee009f5f6f3c1c2081d7166ffac4baef23197ebeba8de7767c6ddfe255
2024-07-11 19:08:46 +01:00
merge-script
c2c0b4f002
Merge bitcoin/bitcoin#30146: Add clang-tidy check for thread_local vars
34c9cee380 clang-tidy: add check for non-trivial thread_local vars (Cory Fields)

Pull request description:

  Forbid thread_local vars with non-trivial destructors.

  This is a follow-up from: https://github.com/bitcoin/bitcoin/pull/30095#discussion_r1608423170

ACKs for top commit:
  maflcko:
    ACK 34c9cee380
  TheCharlatan:
    Re-ACK 34c9cee380

Tree-SHA512: 3a798607fb189a5bbc714ed6e86dea462fe29d366b790e96d10a7b4ffcf1f194da9b8f4cd0b82154408709b8e3c58d3f613d6311903bd65a76d8b556ab230d21
2024-07-11 18:59:49 +01:00
merge-script
a231cfe964
Merge bitcoin/bitcoin#30383: util: Catch translation string errors at compile time
fa601ab9f7 util: Catch translation string errors at compile time (MarcoFalke)

Pull request description:

  The translation helper function `_()` has many problems. For example, the following compiles:

  ```cpp
  auto ptr{"wrong"};
  _(ptr);
  _(nullptr);
  _(0);
  _(NULL);
  ```

  However, it is wrong, because none of the arguments passed to the function can be picked up by the translation tooling for transifex.

  Fix all issues by enforcing only real string literals can be passed to the function.

ACKs for top commit:
  ryanofsky:
    Code review ACK fa601ab9f7
  hebasto:
    ACK fa601ab9f7.

Tree-SHA512: 33aed02d7e8fc9bfb8f90746f5c8072a8c0910fa900ec3516af2e732780b0fee8b07b6596c0fc210b018c0869111d6c34bf8d083de0e88ecdb4dee88e809186d
2024-07-11 18:51:49 +01:00
merge-script
e51653985c
Merge bitcoin/bitcoin#30397: refactor: Use designated initializer in test/util/net.cpp
e233ec036d refactor: Use designated initializer (Hodlinator)

Pull request description:

  Block was recently touched (e2d1f84858) and the codebase recently switched to C++20 which allows this to improve robustness.

  Follow-up suggested in https://github.com/bitcoin/bitcoin/pull/29625#discussion_r1664818014

ACKs for top commit:
  maflcko:
    ACK e233ec036d

Tree-SHA512: ce3a18f513421e923710a43c8f97db1badb7ff5c6bdbfd62d9543312d2225731db5c14bef16feb47c43b84fad4dc24485086634b680feba422d2b7b363e13fa6
2024-07-11 18:37:19 +01:00
Cory Fields
9010b1343b contrib: c++ify test stubs after switching to c++ compilers 2024-07-11 17:29:06 +00:00
merge-script
e5a5497d98
Merge bitcoin/bitcoin#30427: remove truc_policy from libbitcoin_common_a_SOURCES
e8c3b7172c remove truc_policy.cpp from libbitcoin_common_a_SOURCES (glozow)

Pull request description:

  Hebasto pointed out that it doesn't need to be there since it's in `libbitcoin_node_a_SOURCES`

ACKs for top commit:
  maflcko:
    ACK e8c3b7172c
  hebasto:
    ACK e8c3b7172c, this change follows the design [docs](https://github.com/bitcoin/bitcoin/blob/master/doc/design/libraries.md).
  ismaelsadeeq:
    ACK e8c3b7172c

Tree-SHA512: ebe6b0dda2d097d88c37d2b071ac99da3e9c519ec473d4b8f870a50f1b24d00e2e5deef317fb0f6a91c96103e7f37468cb8f13395818eab55a42af48df4e0fc6
2024-07-11 17:35:58 +01:00
glozow
d9aa7b23e4
Merge bitcoin/bitcoin#26596: wallet: Migrate legacy wallets to descriptor wallets without requiring BDB
8ce3739edb test: verify wallet is still active post-migration failure (furszy)
771bc60f13 wallet: Use LegacyDataSPKM when loading (Ava Chow)
61d872f1b3 wallet: Move MigrateToDescriptor and DeleteRecords to LegacyDataSPKM (Ava Chow)
b231f4d556 wallet: Move LegacyScriptPubKeyMan::IsMine to LegacyDataSPKM (Ava Chow)
7461d0c006 wallet: Move LegacySPKM data storage and handling to LegacyDataSPKM (Ava Chow)
517e204bac Change MigrateLegacyToDescriptor to reopen wallet as BERKELEY_RO (Ava Chow)

Pull request description:

  #26606 introduced `BerkeleyRODatabase` which is an independent parser for BDB files. This PR uses this in legacy wallet migration so that migration will continue to work once the legacy wallet and BDB are removed. `LegacyDataSPKM` is introduced to have the minimum data and functions necessary for a legacy wallet to be loaded for migration.

ACKs for top commit:
  cbergqvist:
    ACK 8ce3739edb
  theStack:
    Code-review ACK 8ce3739edb
  furszy:
    Code review ACK 8ce3739edb

Tree-SHA512: dccea12d6c597de15e3e42f97ab483cfd069e103611200279a177e021e8e9c4e74387c4f45d2e58b3a1e7e2bdb32a1d2d2060b1f8086c03eeaa0c68579d9d54e
2024-07-11 16:47:02 +01:00