41315 Commits

Author SHA1 Message Date
fanquake
7c298fe0df
doc: rewrite some of the macdeploy docs
Somewhat of a followup to #21778.
2024-06-14 09:43:36 +01:00
fanquake
d042230f7a
depends: swap mmacosx-version-min for mmacos-version-min
Whilst these remain aliases for each other, the later is preferred,
and I assume the former will be removed at some point in the future;
see: https://github.com/llvm/llvm-project/pull/95374.
2024-06-14 09:43:36 +01:00
merge-script
8efc346e3b
Merge bitcoin/bitcoin#30278: test: cover more errors for signrawtransactionwithkey RPC
e2779ce98b39e14cada08a654928e798436f5a46 test: cover more errors for `signrawtransactionwithkey` RPC (brunoerg)

Pull request description:

  This PR adds test coverage for the following errors for the `signrawtransactionwithkey` RPC:

  - Invalid private key
  - TX decode failed

  For reference: https://maflcko.github.io/b-c-cov/total.coverage/src/rpc/rawtransaction.cpp.gcov.html

ACKs for top commit:
  maflcko:
    ACK e2779ce98b39e14cada08a654928e798436f5a46
  kevkevinpal:
    ACK [e2779ce](e2779ce98b)
  tdb3:
    ACK e2779ce98b39e14cada08a654928e798436f5a46
  BrandonOdiwuor:
    Code Review ACK e2779ce98b39e14cada08a654928e798436f5a46

Tree-SHA512: 41c7e990684b60645cf4ccec8aad5ebbe61da221871eb3c1685b2bb1eebda58b29358502cb1525b7c7a2b612e2bebf449ed0bae14ab663b4641c528a9c013b5b
2024-06-14 09:42:20 +01:00
Ava Chow
fcc3b653dc
Merge bitcoin/bitcoin#29607: refactor: Reduce memory copying operations in bech32 encoding
07f64177a49f1b6b4d486d10cf67fddfa3c995eb Reduce memory copying operations in bech32 encode (Lőrinc)
d5ece3c4b5e109f65f5d3315c43239dd87bb2c81 Reserve hrp memory in Decode and LocateErrors (Lőrinc)

Pull request description:

  Started optimizing the base conversions in [TryParseHex](https://github.com/bitcoin/bitcoin/pull/29458), [Base58](https://github.com/bitcoin/bitcoin/pull/29473) and [IsSpace](https://github.com/bitcoin/bitcoin/pull/29602) - this is the next step.

  Part of this change was already merged in https://github.com/bitcoin/bitcoin/pull/30047, which made decoding `~26%` faster.

  Here I've reduced the memory reallocations and copying operations in bech32 encode, making it `~15%` faster.

  >  make && ./src/bench/bench_bitcoin --filter='Bech32Encode' --min-time=1000

  Before:
  ```
  |             ns/byte |              byte/s |    err% |     total | benchmark
  |--------------------:|--------------------:|--------:|----------:|:----------
  |               19.97 |       50,074,562.72 |    0.1% |      1.06 | `Bech32Encode`
  ```

  After:
  ```
  |             ns/byte |              byte/s |    err% |     total | benchmark
  |--------------------:|--------------------:|--------:|----------:|:----------
  |               17.33 |       57,687,668.20 |    0.1% |      1.10 | `Bech32Encode`
  ```

ACKs for top commit:
  josibake:
    ACK 07f64177a4
  sipa:
    utACK 07f64177a49f1b6b4d486d10cf67fddfa3c995eb
  achow101:
    ACK 07f64177a49f1b6b4d486d10cf67fddfa3c995eb

Tree-SHA512: 511885217d044ad7ef2bdf9203b8e0b94eec8b279bc193bb7e63e29ab868df6d21e9e4c7a24390358e1f9c131447ee42039df72edcf1e2b11e1856eb2b3e10dd
2024-06-13 12:18:49 -04:00
merge-script
080a47cb8a
Merge bitcoin/bitcoin#30270: Update minisketch subtree to eb37a9b8e79f9e49d73b96a49bf97a96d9eb676c
cb59af38e72ab189b052ec84e2d1027473235ba4 Squashed 'src/minisketch/' changes from 3472e2f5ec..eb37a9b8e7 (fanquake)

Pull request description:

  Includes https://github.com/sipa/minisketch/pull/87 which is used in https://github.com/bitcoin/bitcoin/pull/30234.
  Includes https://github.com/sipa/minisketch/pull/88 which is used in https://github.com/bitcoin/bitcoin/pull/29876.

ACKs for top commit:
  sipa:
    utACK 89464ad59cf11f68315ea3104236989e5b429d15
  theuni:
    utACK 89464ad59cf11f68315ea3104236989e5b429d15

Tree-SHA512: 838a8c60856bfdf714da7d5d97e31d458290849ba5007d5c5bb7abb83d413ada6b4c16e45b0e060ff892b5785e6b664be9b6a666d04f0a414b0e359d64d3ad44
2024-06-13 12:30:38 +01:00
Ava Chow
ff21eb2def
Merge bitcoin/bitcoin#30219: Lint: Support running individual lint checks
0fcbfdb7ad172e518a10dd6e5be4cb6bb1158784 Support running individual lint checks (David Gumberg)

Pull request description:

  This PR was split out from  #29965:

  Adds support for running individual tests in the rust lint suite by passing `--lint=LINT_TO_RUN` to the lint runner. This PR also adds a corresponding help message.

  When running with `cargo run`, arguments after a double dash (`--`) are passed to the binary instead of the cargo command. For example, in order to run the linter check that tabs are not used as whitespace:

  ```console
  cd test/lint/test_runner && cargo run -- --lint=tabs_whitespace
  ```

ACKs for top commit:
  maflcko:
    ACK 0fcbfdb7ad172e518a10dd6e5be4cb6bb1158784
  achow101:
    ACK 0fcbfdb7ad172e518a10dd6e5be4cb6bb1158784
  marcofleon:
    Tested ACK 0fcbfdb7ad172e518a10dd6e5be4cb6bb1158784. Ran `cargo run` with various of the individual tests and with bad input. Also ran it with no arguments. Everything works as expected and help message looks good.

Tree-SHA512: 48fe4aa9fbb2acef5f8e3c17382ae22e0e350ae6ad9aeeb1a3c0a9192de98809f98728e32b8db24a36906ace999e35626ebd6cb2ca05f74146d21e9b6fb14615
2024-06-12 17:19:48 -04:00
Ava Chow
011a895a82
Merge bitcoin/bitcoin#29015: kernel: Streamline util library
c7376babd19d0c858fef93ebd58338abd530c1f4 doc: Clarify distinction between util and common libraries in libraries.md (Ryan Ofsky)
4f74c59334d496f28e1a5c0d84c412f9020b366f util: Move util/string.h functions to util namespace (Ryan Ofsky)
4d05d3f3b42a41525aa6ec44b90f543dfab53ecf util: add TransactionError includes and namespace declarations (Ryan Ofsky)
680eafdc74021c1e0893c3a62404e607fd4724f5 util: move fees.h and error.h to common/messages.h (Ryan Ofsky)
02e62c6c9af4beabaeea58fb1ea3ad0dc5094678 common: Add PSBTError enum (Ryan Ofsky)
0d44c44ae33434f366229c612d6edeedf7658963 util: move error.h TransactionError enum to node/types.h (Ryan Ofsky)
9bcce2608dd2515dc35a0f0866abc9d43903c795 util: move spanparsing.h to script/parsing.h (Ryan Ofsky)
6dd2ad47922694d2ab84bad4dac9dd442c5df617 util: move spanparsing.h Split functions to string.h (Ryan Ofsky)
23cc8ddff472d259605d7790ba98a1900e77efab util: move HexStr and HexDigit from util to crypto (TheCharlatan)
6861f954f8ff42c87ad638037adae86a5bd89600 util: move util/message to common/signmessage (Ryan Ofsky)
cc5f29fbea15d33e4d1aa95591253c6b86953fe7 build: move memory_cleanse from util to crypto (Ryan Ofsky)
5b9309420cc9721a0d5745b6ad3166a4bdbd1508 build: move chainparamsbase from util to common (Ryan Ofsky)
ffa27af24da81a97d6c4912ae0e10bc5b6f17f69 test: Add check-deps.sh script to check for unexpected library dependencies (Ryan Ofsky)

Pull request description:

  Remove `fees.h`, `errors.h`, and `spanparsing.h` from the util library. Specifically:

  - Move `Split` functions from `util/spanparsing.h` to `util/string.h`, using `util` namespace for clarity.
  - Move remaining spanparsing functions to `script/parsing.h` since they are used for descriptor and miniscript parsing.
  - Combine `util/fees.h` and `util/errors.h` into `common/messages.h` so there is a place for simple functions that generate user messages to live, and these functions are not part of the util library.

  Motivation for this change is that the util library is a dependency of the kernel, and we should remove functionality from util that shouldn't be called by kernel code or kernel applications. These changes should also improve code organization and make functions easier to discover. Some of these same moves are (or were) part of #28690, but did not help with code organization, or made it worse, so it is better to move them and clean them up in the same PR so code only has to change one time.

ACKs for top commit:
  achow101:
    ACK c7376babd19d0c858fef93ebd58338abd530c1f4
  TheCharlatan:
    Re-ACK c7376babd19d0c858fef93ebd58338abd530c1f4
  hebasto:
    re-ACK c7376babd19d0c858fef93ebd58338abd530c1f4.

Tree-SHA512: 5bcef16c1255463b1b69270548711e7ff78ca0dd34e300b95e3ca1ce52ceb34f83d9ddb2839e83800ba36b200de30396e504bbb04fa02c6d0c24a16d06ae523d
2024-06-12 17:12:54 -04:00
brunoerg
e2779ce98b test: cover more errors for signrawtransactionwithkey RPC
* Invalid private key
* TX decode failed
2024-06-12 17:07:16 -03:00
merge-script
a7bc9b76e7
Merge bitcoin/bitcoin#30229: fuzz: Use std::span in FuzzBufferType
faa41e29d5b90e62179d651f4010272dae685621 fuzz: Use std::span in FuzzBufferType (MarcoFalke)

Pull request description:

  The use of `Span` is problematic, because it lacks methods such as `rbegin`, leading to compile failures when used:

  ```
  error: no member named 'rbegin' in 'Span<const unsigned char>'
  ```

  One could fix `Span`, but it seems better to use `std::span`, given that `Span` will be removed anyway in the long term.

ACKs for top commit:
  dergoegge:
    utACK faa41e29d5b90e62179d651f4010272dae685621

Tree-SHA512: 54bcaf51c83a1b48739cd7f1e8445c6eba0eb04231bce5c35591a47dddb3890ffcaf562cf932930443c80ab0e66950c4619560e6692240de0c52aeef3214facd
2024-06-12 18:16:07 +01:00
merge-script
d0cb5167d6
Merge bitcoin/bitcoin#30230: fuzz: add I2P harness
193c748e44f8647a056121fc9cbb9c2efbcbfc49 fuzz: add I2P harness (marcofleon)

Pull request description:

  Addresses https://github.com/bitcoin/bitcoin/issues/28803. This updated harness sets mock time at the beginning of each iteration and deletes the private key file at the end of each iteration. Mock time is used to make the fuzz test more stable, as `GetTime` is called at points in `i2p`. Deleting the private key file ensures that each iteration is independent from the last. Now, a new key is generated in `i2p` every time, so the fuzzer can eventually make progress through the target code.

  Re-working this harness also led me and dergoegge to resolve a couple of issues in `FuzzedSock`, which allows for full coverage of the `i2p` code. Those changes can be seen in https://github.com/bitcoin/bitcoin/pull/30211.

  The SAM protocol for interacting with I2P requires some specifc inputs so it's best to use a dictionary when running this harness.

  <details>
  <summary>I2P dict</summary>

  ```
  "HELLO VERSION"
  "HELLO REPLY RESULT=OK VERSION="
  "HELLO REPLY RESULT=NOVERSION"
  "HELLO REPLY RESULT=I2P_ERROR"
  "SESSION CREATE"
  "SESSION STATUS RESULT=OK DESTINATION="
  "SESSION STATUS RESULT=DUPLICATED_ID"
  "SESSION STATUS RESULT=DUPLICATED_DEST"
  "SESSION STATUS RESULT=INVALID_ID"
  "SESSION STATUS RESULT=INVALID_KEY"
  "SESSION STATUS RESULT=I2P_ERROR MESSAGE="
  "SESSION ADD"
  "SESSION REMOVE"
  "STREAM CONNECT"
  "STREAM STATUS RESULT=OK"
  "STREAM STATUS RESULT=INVALID_ID"
  "STREAM STATUS RESULT=INVALID_KEY"
  "STREAM STATUS RESULT=CANT_REACH_PEER"
  "STREAM STATUS RESULT=I2P_ERROR MESSAGE="
  "STREAM ACCEPT"
  "STREAM FORWARD"
  "DATAGRAM SEND"
  "RAW SEND"
  "DEST GENERATE"
  "DEST REPLY PUB= PRIV="
  "DEST REPLY RESULT=I2P_ERROR"
  "NAMING LOOKUP"
  "NAMING REPLY RESULT=OK NAME= VALUE="
  "DATAGRAM RECEIVED DESTINATION= SIZE="
  "RAW RECEIVED SIZE="
  "NAMING REPLY RESULT=INVALID_KEY NAME="
  "NAMING REPLY RESULT=KEY_NOT_FOUND NAME="
  "MIN"
  "MAX"
  "STYLE"
  "ID"
  "SILENT"
  "DESTINATION"
  "NAME"
  "SIGNATURE_TYPE"
  "CRYPTO_TYPE"
  "SIZE"
  "HOST"
  "PORT"
  "FROM_PORT"
  "TRANSIENT"
  "STREAM"
  "DATAGRAM"
  "RAW"
  "MASTER"
  "true"
  "false"
  ```

  </details>

  I'll add this dict to qa-assets later on.

ACKs for top commit:
  dergoegge:
    tACK 193c748e44f8647a056121fc9cbb9c2efbcbfc49
  brunoerg:
    ACK 193c748e44f8647a056121fc9cbb9c2efbcbfc49
  vasild:
    ACK 193c748e44f8647a056121fc9cbb9c2efbcbfc49

Tree-SHA512: 09ae4b3fa0738aa6f159f4d920493bdbce786b489bc8148e7a135a881e9dba93d727b40f5400c9510e218dd2cfdccc7ce2d3ac9450654fb29c78aac59af92ec3
2024-06-12 17:59:59 +01:00
fanquake
89464ad59c
Update minisketch subtree to latest master 2024-06-12 14:38:39 +01:00
fanquake
cb59af38e7 Squashed 'src/minisketch/' changes from 3472e2f5ec..eb37a9b8e7
eb37a9b8e7 Merge sipa/minisketch#87: Avoid copy in self-assign
fe6557642e Merge sipa/minisketch#88: build: Add `-Wundef`
8ea298bfa7 Avoid copy in self-assign
978a3d8869 build: Add `-Wundef`
3387044179 Merge sipa/minisketch#86: doc: fix typo in sketch_impl.h
15c2d13b60 doc: fix typo in sketch_impl.h
7be08b8a46 Merge sipa/minisketch#85: Fixes for integer precision loss
00fb4a4d83 Avoid or make integer precision conversion explicit
9d62a4d27c Avoid the need to cast/convert to size_t for vector operations
19e06cc7af Prevent overflows from large capacity/max_elements

git-subtree-dir: src/minisketch
git-subtree-split: eb37a9b8e79f9e49d73b96a49bf97a96d9eb676c
2024-06-12 14:38:39 +01:00
MarcoFalke
faa41e29d5
fuzz: Use std::span in FuzzBufferType 2024-06-12 15:21:31 +02:00
glozow
aa6b876e01
Merge bitcoin/bitcoin#30268: util: add missing VecDeque include
f51da34ec1a806d321a468691fa66082eef10ad9 utils: add missing include (Cory Fields)

Pull request description:

  Noticed when testing `VecDeque` with no other includes.

  For libc++, need type_traits for `std::is_trivially_destructible_v`.

ACKs for top commit:
  maflcko:
    ACK f51da34ec1a806d321a468691fa66082eef10ad9
  glozow:
    ACK f51da34ec1a806d321a468691fa66082eef10ad9
  sipa:
    utACK f51da34ec1a806d321a468691fa66082eef10ad9

Tree-SHA512: bf96910abe9aaddd8586e6cc8f68a9bbac4c26d976ebeebcfa86b86c0da5783c1cbdbc7fa09b62cdcfde19e6442eb65a66bf1e2e80408d68e9dd9689dc22b0fa
2024-06-12 12:54:28 +01:00
merge-script
5ee6b76c69
Merge bitcoin/bitcoin#29325: consensus: Store transaction nVersion as uint32_t
429ec1aaaaafab150f11e27fcf132a99b57c4fc7 refactor: Rename CTransaction::nVersion to version (Ava Chow)
27e70f1f5be1f536f2314cd2ea42b4f80d927fbd consensus: Store transaction nVersion as uint32_t (Ava Chow)

Pull request description:

  Given that the use of a transaction's nVersion is always as an unsigned int, it doesn't make sense to store it as signed and then cast it to unsigned everywhere it is used and displayed.

  Since a few alternative implementations have recently been revealed to have made an error with this signedness that would have resulted in consensus failure, I think it makes sense for us to just make this always unsigned to make it clear that the version is treated as unsigned. This would also help us avoid future potential issues with signedness of this value.

  I believe that this is safe and does not actually change what transactions would or would not be considered both standard and consensus valid. Within consensus, the only use of the version in consensus is in BIP68 validation which was already casting it to uint32_t. Within policy, although it is used as a signed int for the transaction version number check, I do not think that this change would change standardness. Standard transactions are limited to the range [1, 2]. Negative numbers would have fallen under the < 1 condition, but by making it unsigned, they are still non-standard under the > 2 condition.

  Unsigned and signed ints are serialized and unserialized the same way so there is no change in serialization.

ACKs for top commit:
  maflcko:
    ACK 429ec1aaaaafab150f11e27fcf132a99b57c4fc7 🐿
  glozow:
    ACK 429ec1aaaa
  shaavan:
    ACK 429ec1aaaaafab150f11e27fcf132a99b57c4fc7 💯

Tree-SHA512: 0bcd92a245d7d16c3665d2d4e815a4ef28207ad4a1fb46c6f0203cdafeab1b82c4e95e4bdce7805d80a4f4a46074f6542abad708e970550d38a00d759e3dcef1
2024-06-12 10:32:31 +01:00
merge-script
416e26c1db
Merge bitcoin/bitcoin#30261: doc: add release note for 29091 and 29165
3d4ca62d883b17d983d6f62cdacbd67a483f7d64 doc: add release note for 29091 and 29165 (fanquake)

Pull request description:

  GCC 11.x or Clang 15.x are now required to compile Bitcoin Core.

ACKs for top commit:
  hebasto:
    ACK 3d4ca62d883b17d983d6f62cdacbd67a483f7d64.

Tree-SHA512: 6469a920ff9512897eeeb85d9c5538fd24884aabb20754d0f699f9975d81a320547de9e41758c242c4271bd45b7a76c363efe2ef703e156497e2c8cb9f3c14da
2024-06-12 10:23:28 +01:00
Ava Chow
91e0beede2
Merge bitcoin/bitcoin#30160: util: add BitSet
47f705b33fc1381d96c99038e2110e6fe2b2f883 tests: add fuzz tests for BitSet (Pieter Wuille)
59a6df6bd584701f820ad60a10d9d477bf0236b5 util: add BitSet (Pieter Wuille)

Pull request description:

  Extracted from #30126.

  This introduces the `BitSet` data structure, inspired by `std::bitset`, but with a few features that cannot be implemented on top without efficiency loss:
  * Finding the first set bit (`First`)
  * Finding the last set bit (`Last`)
  * Iterating over all set bits (`begin` and `end`).

  And a few other operators/member functions that help readability for #30126:
  * `operator-` for set subtraction
  * `Overlaps()` for testing whether intersection is non-empty
  * `IsSupersetOf()` for testing (non-strict) supersetness
  * `IsSubsetOf()` for testing (non-strict) subsetness
  * `Fill()` to construct a set with all numbers from 0 to n-1, inclusive
  * `Singleton()` to construct a set with one specific element.

  Everything is tested through a simulation-based fuzz test that compares the behavior with normal `std::bitset` equivalent operations.

ACKs for top commit:
  instagibbs:
    ACK 47f705b33f
  achow101:
    ACK 47f705b33fc1381d96c99038e2110e6fe2b2f883
  cbergqvist:
    re-ACK 47f705b33fc1381d96c99038e2110e6fe2b2f883
  theStack:
    Code-review ACK 47f705b33fc1381d96c99038e2110e6fe2b2f883

Tree-SHA512: e451bf4b801f193239ee434b6b614f5a2ac7bb49c70af5aba24c2ac0c54acbef4672556800e4ac799ae835632bdba716209c5ca8c37433a6883dab4eb7cd67c1
2024-06-11 17:28:51 -04:00
Ava Chow
891e4bf374
Merge bitcoin/bitcoin#28339: validation: improve performance of CheckBlockIndex
5bc2077e8f592442b089affdf0b5795fbc053bb8 validation: allow to specify frequency for -checkblockindex (Martin Zumsande)
d5a631b9597e5029a5048d9b8ad84ea4536bbac0 validation: improve performance of CheckBlockIndex (Martin Zumsande)
32c80413fdb063199f3bee719c4651bd63f05fce bench: add benchmark for checkblockindex (Martin Zumsande)

Pull request description:

  `CheckBlockIndex() ` are consistency checks that are currently enabled by default on regtest.

  The function is rather slow, which is annoying if you
  * attempt to run it on other networks, especially if not fully synced
  * want to generate a long chain on regtest and see block generation slow down because you forgot to disable `-checkblockindex` or don't know it existed.

  One reason why it's slow is that in order to be able to traverse the block tree depth-first from genesis, it inserts pointers to all block indices into a `std::multimap` - for which inserts and lookups become slow once there are hundred thousands of entries.
  However, typically the block index is mostly chain-like with just a few forks so a multimap isn't really needed for the most part. This PR suggests to store the block indices of the chain ending in the best header in a vector instead, and store only the rest of the indices in a multimap. This does not change the actual consistency checks that are being performed for each index, just the way the block index tree is stored and traversed.

  This adds a bit of complication to make sure each block is visited (note that there are asserts that check it), making sure that the two containers are traversed correctly, but it speeds up the function considerably:

  On master, a single invocation of `CheckBlockIndex` takes ~1.4s on mainnet for me (4.9s on testnet which has >2.4 million blocks).
  With this branch, the runtime goes down to ~0.27s (0.85s on testnet).This is a speedup by a factor ~5.

ACKs for top commit:
  achow101:
    ACK 5bc2077e8f592442b089affdf0b5795fbc053bb8
  furszy:
    ACK 5bc2077e8f592442b089affdf0b5795fbc053bb8
  ryanofsky:
    Code review ACK 5bc2077e8f592442b089affdf0b5795fbc053bb8. Just added suggested assert and simplification since last review

Tree-SHA512: 6b9c3e3e5069d6152b45a09040f962380d114851ff0f9ff1771cf8cad7bb4fa0ba25cd787ceaa3dfa5241fb249748e2ee6987af0ccb24b786a5301b2836f8487
2024-06-11 16:41:44 -04:00
Ava Chow
1bcc91a52c
Merge bitcoin/bitcoin#29521: cli: Detect port errors in rpcconnect and rpcport
24bc46c83b39149f4845a575a82337eb46d91bdb cli: Add warning for duplicate port definition (tdb3)
e208fb5d3bea4c1fb750cb0028819635ecdeb415 cli: Sanitize ports in rpcconnect and rpcport (tdb3)

Pull request description:

  Adds invalid port detection to bitcoin-cli for -rpcconnect and -rpcport.

  In addition to detecting malformed/invalid ports (e.g. those outside of the 16-bit port range, not numbers, etc.), bitcoin-cli also now considers usage of port 0 to be invalid.  bitcoin-cli previously considered port 0 to be valid and attempted to use it to reach bitcoind.

  Functional tests were added for invalid port detection as well as port prioritization.
  Additionally, a warning is provided when a port is specified in both -rpcconnect and -rpcport.

  This PR is an alternate approach to PR #27820 (e.g. SplitHostPort is unmodified).

  Considered an alternative to 127.0.0.1 being specified in functional tests, but at first glance, this might need an update to test_framework/util.py (e.g.  rpc_url), which might be left to a future PR.

ACKs for top commit:
  S3RK:
    light code review ACK 24bc46c83b39149f4845a575a82337eb46d91bdb
  achow101:
    ACK 24bc46c83b39149f4845a575a82337eb46d91bdb
  cbergqvist:
    re ACK 24bc46c83b39149f4845a575a82337eb46d91bdb

Tree-SHA512: c83ab6a30a08dd1ac8b368a7dcc2b4f23170f0b61dd67ffcad7bcda05096d333bcb9821fba11018151f55b2929c0a333bfec15b8bb863d83f41fc1974c6efca5
2024-06-11 15:55:18 -04:00
Ava Chow
2251460f3e
Merge bitcoin/bitcoin#28830: [refactor] Check CTxMemPool options in ctor
09ef322acc0a88a9e119f74923399598984c68f6 [[refactor]] Check CTxMemPool options in constructor (TheCharlatan)

Pull request description:

  The tests should run the same checks on the mempool options that the init code also applies. The downside to this patch is that the log line may now be printed more than once in the for loop.

  This was originally noticed here https://github.com/bitcoin/bitcoin/pull/25290#discussion_r900272797.

ACKs for top commit:
  stickies-v:
    re-ACK 09ef322acc0a88a9e119f74923399598984c68f6 . Fixed unreachable assert and updated docstring, and also added an exception for "-maxmempool must be at least " in the `tx_pool` fuzz test, which makes sense when looking at how the mempool options are constructed in `SetMempoolConstraints`.
  achow101:
    ACK 09ef322acc0a88a9e119f74923399598984c68f6
  ryanofsky:
    Code review ACK 09ef322acc0a88a9e119f74923399598984c68f6. Just fuzz test error checking fix and updated comment since last review

Tree-SHA512: eb3361411c2db70be17f912e3b14d9cb9c60fb0697a1eded952c3b7e8675b7d783780d45c52e091931d1d80fe0f0280cee98dd57a3100def13af20259d9d1b9e
2024-06-11 15:24:49 -04:00
Cory Fields
f51da34ec1 utils: add missing include
Noticed when testing VecDeque with no other includes.

For libc++, need type_traits for std::is_trivially_destructible_v.
2024-06-11 16:28:11 +00:00
merge-script
337f9d44c2
Merge bitcoin/bitcoin#30201: depends: remove FORCE_USE_SYSTEM_CLANG
7cbfd7a7ce45ac68d6041f42f468862f5c193d8c refactor: rename (macho) ld64 to lld (fanquake)
d851451705aa67175cbafb06f455e6969131f90f ci: update deps for macOS cross build (fanquake)
9ebdd5e9e04be3355309d3096da00db37b4d540c depends: update install docs for macOS cross compilation (fanquake)
fb74fd66cb2b016f07e47dc58d81b33034ce851b depends: remove no-longer used llvm_* vars from macOS build (fanquake)
9043f12425d869d8bf7f2be1bb12368e41d09c5d depends: no-longer pass -B to clang in macOS cross-compile (fanquake)
f9994b025e1d72b4c0f5267de54caa2bfae136a3 depends: remove native LLVM package (fanquake)
e9a44faf14854c5b05a297df182d10706f438a83 depends: remove FORCE_USE_SYSTEM_CLANG (fanquake)
9946618f6174422d9ba93bf96c278269bebacf39 guix: use clang-toolchain-18 for macOS build (fanquake)

Pull request description:

  Remove `FORCE_USE_SYSTEM_CLANG` in favour of always using the system Clang and lld for macOS cross-compilation; rather than downloading precompiled blobs.

  For example, anyone using Ubuntu 24.04 should be able to `apt install clang llvm lld .. etc`, and then cross-compile for macOS using:
  ```bash
  # clang --version
  Ubuntu clang version 18.1.3 (1)
  make -C depends HOST=arm64-apple-darwin FORCE_USE_SYSTEM_CLANG=1
  ./autogen.sh
  CONFIG_SITE=/path/to/depends/arm64-apple-darwin/share/config.site ./configure
  make
  # file src/qt/bitcoin-qt
  src/qt/bitcoin-qt: Mach-O 64-bit arm64 executable, flags:<NOUNDEFS|DYLDLINK|TWOLEVEL|WEAK_DEFINES|BINDS_TO_WEAK|PIE|HAS_TLV_DESCRIPTORS>
  ```

  Note that the minimum supported version of Clang we will support for macOS cross-compilation will likely be more recent than our other minimum supported version of Clang, due to compiler/linker option usage.

ACKs for top commit:
  Sjors:
    tACK 7cbfd7a7ce45ac68d6041f42f468862f5c193d8c
  theuni:
    ACK 7cbfd7a7ce45ac68d6041f42f468862f5c193d8c
  TheCharlatan:
    Nice, ACK 7cbfd7a7ce45ac68d6041f42f468862f5c193d8c

Tree-SHA512: 1499e29b3b238c5c85278c38e8fb6bb5e7883db3443f62b6bf397c5d761bedbc054962be645a9defce15266f0a969bb4b3ccd28b6e4dd874472857b928f185d1
2024-06-11 16:40:43 +01:00
merge-script
5bc9b644a4
Merge bitcoin/bitcoin#30264: test: add coverage for errors for combinerawtransaction
ab98e6fd03970d6b5a593674c84e762a47b90ea6 test: add coverage for errors for `combinerawtransaction` RPC (brunoerg)

Pull request description:

  This PR adds test coverage for the following errors for the `combinerawtransaction` RPC:

  * Tx decode failed
  * Missing transactions
  * Input not found or already spent

  For reference: https://maflcko.github.io/b-c-cov/total.coverage/src/rpc/rawtransaction.cpp.gcov.html

ACKs for top commit:
  maflcko:
    lgtm ACK ab98e6fd03970d6b5a593674c84e762a47b90ea6
  tdb3:
    ACK ab98e6fd03970d6b5a593674c84e762a47b90ea6

Tree-SHA512: 8a133c25dad2e1b236e0278a88796f60f763e3fd6fbbc080f926bb23f9dcc55599aa242d6e0c4ec15a179d9ded10a1f17ee5b6063719107ea84e6099f10416b2
2024-06-11 15:29:18 +01:00
merge-script
0fbb8043ce
Merge bitcoin/bitcoin#30252: test: Remove redundant verack check
0000276b31cea5e443a59d94a98c569293ada951 test: Remove redundant verack check (MarcoFalke)

Pull request description:

  Currently the sync in `connect_nodes` mentions the `version` and `verack` message types, but only checks the `verack`. Neither check is required, as the `pong` check implies both. In case of failure, the debug log will have to be consulted anyway, so the redundant check doesn't add value.

  Also clarify in the comments that the goal is to check the flag `fSuccessfullyConnected` indirectly.

ACKs for top commit:
  furszy:
    utACK 0000276b31ce
  brunoerg:
    ACK 0000276b31cea5e443a59d94a98c569293ada951
  tdb3:
    ACK 0000276b31cea5e443a59d94a98c569293ada951

Tree-SHA512: f9ddcb1436d2f70da462a8dd470ecfc90a534dd6507c23877ef7626e7c02326c077001a42ad0171a87fba5c5275d1970d8c5e5d82c56c8412de944856fdfd6db
2024-06-11 14:11:34 +01:00
glozow
e6e4c18a9b
Merge bitcoin/bitcoin#30162: test: MiniWallet: respect passed feerate for padded txs (using target_weight)
39d135e79f3f0c40dfd8fad2c53723d533cd19b4 test: MiniWallet: respect fee_rate for target_weight, use in mempool_limit.py (Sebastian Falbesoner)
b2f0a9f8b0776d49ef1639310311ca50435a2a0a test: add framework functional test for MiniWallet's tx padding (Sebastian Falbesoner)
c17550bc3a68faa1eb82d1bdb767b41d8cd85a6b test: MiniWallet: fix tx padding (`target_weight`) for large sizes, improve accuracy (Sebastian Falbesoner)

Pull request description:

  MiniWallet allows to create padded transactions that are equal or slightly above a certain `target_weight` (first introduced in PR #25379, commit 1d6b438ef0ccd05e1522ac38b44f847c1d93e72f), which can be useful especially for mempool-related tests, e.g. for policy limit checks or scenarios to trigger mempool eviction. Currently the `target_weight` parameter doesn't play together with `fee_rate` though, as the fee calculation is incorrectly based on the tx vsize before the padding output is added, so the fee-rate is consequently far off. This means users are forced to pass an absolute fee, which can be quite inconvenient and leads to lots of duplicated "calculate absolute fee from fee-rate and vsize" code with the pattern `fee = (feerate / 1000) * (weight // 4)` on the call-sites.

  This PR first improves the tx padding itself to be more accurate, adds a functional test for it, and fixes the `fee_rate` treatment for the `{create,send}_self_transfer` methods. (Next step would be to enable this also for the `_self_transfer_multi` methods, but those currently don't even offer a `fee_rate` parameter). Finally, the ability to pass both `target_weight` and `fee_rate` is used in the `mempool_limit.py` functional test. There might be more use-cases in other tests, that could be done in a follow-up.

ACKs for top commit:
  rkrux:
    tACK [39d135e](39d135e79f)
  ismaelsadeeq:
    Code Review ACK 39d135e79f3f0c40dfd8fad2c53723d533cd19b4  🚀
  glozow:
    light review ACK 39d135e79f3f0c40dfd8fad2c53723d533cd19b4

Tree-SHA512: 6bf8e853a921576d463291d619cdfd6a7e74cf92f61933a563800ac0b3c023a06569b581243166906f56b3c5e8858fec2d8a6910d55899e904221f847eb0953d
2024-06-11 13:02:03 +01:00
glozow
ba5dd96298
Merge bitcoin/bitcoin#30254: test: doc: fix units in tx-size standardness test (s/vbytes/weight units)
d1581c6048478cf70c5fb9ec5ebc178f16b376b8 test: doc: fix units in tx size standardness test (s/vbytes/weight units) (Sebastian Falbesoner)

Pull request description:

  This small fixup PR is a late follow-up for #17947 (commit 4537ba5f21ad8afb705325cd8e15dd43877eb28f), where the wrong units has been used in the comments for the large tx composition.

ACKs for top commit:
  tdb3:
    ACK d1581c6048478cf70c5fb9ec5ebc178f16b376b8
  ismaelsadeeq:
    ACK d1581c6048478cf70c5fb9ec5ebc178f16b376b8
  glozow:
    ACK d1581c6048478cf70c5fb9ec5ebc178f16b376b8

Tree-SHA512: ea2de42174f9dca0608275ea377c852ebddc5a04a2b32248ce808aea33d7e00cdee3a225b24c0cf426c69646cccbbc31273c62f7bc1647bb3443a61de3b15670
2024-06-11 11:42:50 +01:00
brunoerg
ab98e6fd03 test: add coverage for errors for combinerawtransaction RPC
* Tx decode failed
* Missing transactions
* Input not found or already spent
2024-06-10 15:19:24 -03:00
Ryan Ofsky
b1ba1b178f
Merge bitcoin/bitcoin#30132: indexes: Don't wipe indexes again when continuing a prior reindex
f68cba29b3be0dec7877022b18a193a3b78c1099 blockman: Replace m_reindexing with m_blockfiles_indexed (Ryan Ofsky)
1b1c6dcca0cc891bd35d29b61628c39098cd94ce test: Add functional test for continuing a reindex (TheCharlatan)
201c1a92824c71ae646d5bba9963871b1d704cc1 indexes: Don't wipe indexes again when already reindexing (TheCharlatan)
804f09dfa116300914e2aeef05ed9710dd504e8c kernel: Add less confusing reindex options (Ryan Ofsky)
e17255322378076edce3ef6f06cd36ca58d2e236 validation: Remove needs_init from LoadBlockIndex (TheCharlatan)
533eab7d67d78f217f74909662133086b79ea808 bugfix: Streamline setting reindex option (TheCharlatan)

Pull request description:

  When restarting `bitcoind` during an ongoing reindex without setting the `-reindex` flag again, the block and coins db is left intact, but any data from the optional indexes is discarded. While not a bug per se, wiping the data again is
  wasteful, both in terms of having to write it again,  as well as potentially leading to longer startup times. So keep the  index data instead when continuing a prior reindex.

  Also includes a bugfix and smaller code cleanups around the reindexing code. The bug was introduced in b47bd959207e82555f07e028cc2246943d32d4c3: "kernel: De-globalize fReindex".

ACKs for top commit:
  stickies-v:
    ACK f68cba29b3be0dec7877022b18a193a3b78c1099
  fjahr:
    Code review ACK f68cba29b3be0dec7877022b18a193a3b78c1099
  furszy:
    Code review ACK f68cba29b3be0dec7877022b18a193a3b78c1099
  ryanofsky:
    Code review ACK f68cba29b3be0dec7877022b18a193a3b78c1099. Only changes since last review were cherry-picking suggested commits that rename variables, improving comments, and making some tweaks to test code.

Tree-SHA512: b252228cc76e9f1eaac56d5bd9e4eac23408e0fc04aeffd97a85417f046229364673ee1ca7410b9b6e7b692b03f13ece17c42a10176da0d7e975a8915deb98ca
2024-06-10 10:12:30 -04:00
fanquake
3d4ca62d88
doc: add release note for 29091 and 29165 2024-06-10 14:25:08 +01:00
fanquake
7cbfd7a7ce
refactor: rename (macho) ld64 to lld
Change some references to the macho ld64 to lld, which is now what is
used.
2024-06-10 13:20:54 +01:00
fanquake
d851451705
ci: update deps for macOS cross build
We are going to use Clang 18, which isn't on Jammy, so bump to Noble.
2024-06-10 13:15:23 +01:00
fanquake
9ebdd5e9e0
depends: update install docs for macOS cross compilation 2024-06-10 13:15:23 +01:00
fanquake
fb74fd66cb
depends: remove no-longer used llvm_* vars from macOS build 2024-06-10 13:15:23 +01:00
fanquake
9043f12425
depends: no-longer pass -B to clang in macOS cross-compile 2024-06-10 13:15:23 +01:00
fanquake
f9994b025e
depends: remove native LLVM package 2024-06-10 13:15:23 +01:00
fanquake
e9a44faf14
depends: remove FORCE_USE_SYSTEM_CLANG 2024-06-10 13:15:23 +01:00
fanquake
9946618f61
guix: use clang-toolchain-18 for macOS build
Version is 18.1.6.
2024-06-10 13:15:22 +01:00
Pieter Wuille
47f705b33f tests: add fuzz tests for BitSet 2024-06-10 07:54:48 -04:00
Pieter Wuille
59a6df6bd5 util: add BitSet
This adds a bitset module that implements a BitSet<N> class, a variant
of std::bitset with a few additional features that cannot be implemented
in a wrapper without performance loss (specifically, finding first and
last bit set, or iterating over all set bits).
2024-06-10 07:54:48 -04:00
merge-script
cad127235e
Merge bitcoin/bitcoin#30257: build: Remove --enable-gprof
fa780e1c25e8e98253e32d93db65f78a0092433f build: Remove --enable-gprof (MarcoFalke)

Pull request description:

  It is unclear what benefit this option has, given that:

  * `gprof` requires re-compilation (`perf` and other tools can instead be used on existing executables)
  * `gprof` requires hardening to be disabled
  * `gprof` doesn't work with `clang`
  * `perf` is documented in the dev-notes, and test notes, and embedded into the functional test framework; `gprof` isn't
  * Anyone really wanting to use it could pass the required flags to `./configure`
  * I couldn't find any mention of the use of `gprof` in the discussions in this repo, apart from the initial pull request adding it (cfaac2a60f3ac63ae8deccb03d88bd559449b78c)
  * Keeping it means that it needs to be maintained and ported to CMake

  Fix all issues by removing it.

ACKs for top commit:
  TheCharlatan:
    ACK fa780e1c25e8e98253e32d93db65f78a0092433f
  hebasto:
    ACK fa780e1c25e8e98253e32d93db65f78a0092433f, I have reviewed the code and it looks OK.
  willcl-ark:
    crACK fa780e1c25e8e98253e32d93db65f78a0092433f

Tree-SHA512: 0a9ff363ac2bec8b743878a4e3147f18bc16823d00c5007568432c36320bd0199b13b6d0ce828a9a83c2cc434c058afaa64eb2eccfbd93ed85b81ce10c41760c
2024-06-10 12:01:19 +01:00
merge-script
bd642ee15b
Merge bitcoin/bitcoin#30227: doc: fixup deps doc after #30198
e6636ff4ec594a38f2e2c4bda3a9549bbc07118e doc: fixup deps doc after #30198 (fanquake)

Pull request description:

  Forgotten in #30198.
  Addresses: https://github.com/bitcoin/bitcoin/pull/30198#issuecomment-2148087913.

ACKs for top commit:
  TheCharlatan:
    ACK e6636ff4ec594a38f2e2c4bda3a9549bbc07118e

Tree-SHA512: 138cba946d0482f11b604a8197177e74f4384c1962dee1d50af6baad40ceb9d064a148244d652d8e140f955f95457f7d0ffdb0e179f8622e71c57cb91c44af29
2024-06-10 10:51:11 +01:00
merge-script
dc4eca4073
Merge bitcoin/bitcoin#30242: ci: Native Windows CI job cleanup
0d3ef83433805d3f367130fd5bd227a8ed5a7ccd ci: Use relative paths in `win64-native` CI job consistently (Hennadii Stepanov)
501aceefcf7536cbdead5bcb53b13f2fec7ab6be ci: Remove no longer needed workaround for GHA Windows images (Hennadii Stepanov)

Pull request description:

  This PR:

  1. Removes no longer needed workaround for GHA Windows images.

  GHA Windows images previously had multiple VC Build Tools installed, which required specifying the `VCPKG_PLATFORM_TOOLSET_VERSION` explicitly to avoid linker errors. This issue has been resolved as per
  https://github.com/actions/runner-images/issues/9701.

  2. Switches all references to temporary files to relative ones for consistency and readability.

ACKs for top commit:
  sipsorcery:
    ACK 0d3ef83433805d3f367130fd5bd227a8ed5a7ccd.
  maflcko:
    ACK 0d3ef83433805d3f367130fd5bd227a8ed5a7ccd

Tree-SHA512: e832b87fc6dee1e9d1eb452797f16b732e776c2ecdbe3dc9e64cc48ce9b5b89c569d5b96b999423ae1261ff4bf684b7003af84d8024ef5260682f531c4e8ff5e
2024-06-10 10:49:53 +01:00
merge-script
7fd4905c40
Merge bitcoin/bitcoin#30235: build: warn on self-assignment
15796d4b61342f75548b20a18c670ed21d102ba8 build: warn on self-assignment (Cory Fields)
53372f21767be449bb452fc3f5fe7f16286ae371 refactor: disable self-assign warning for tests (Cory Fields)

Pull request description:

  Belt-and suspenders after #30234. Self-assignment should be safe _and_ discouraged.

  We used to opt out of this warning because something deep in our serialization/byteswapping code could self-assign, but that doesn't appear to be the case anymore.

ACKs for top commit:
  maflcko:
    ACK 15796d4b61342f75548b20a18c670ed21d102ba8
  fanquake:
    ACK 15796d4b61342f75548b20a18c670ed21d102ba8 - not a huge fan of inline pragma usage, but this seems fine, given it's to work around an already-fixed compiler bug, and we'll only be carrying it for a shortish time in any case.

Tree-SHA512: 1f95f7c730b974ad1da55ebd381040bac312f2f380fff9d569ebab91d7c1963592a84d1613d81d96238c6f5a66aa40deebba68a76f6b24b02150d0a77c769654
2024-06-10 09:36:07 +01:00
merge-script
ea88a7596e
Merge bitcoin/bitcoin#30253: refactor: performance-for-range-copy in psbt.h
fab01b5220c28a334b451ed9625bd3914c48e6af refactor: performance-for-range-copy in psbt.h (MarcoFalke)

Pull request description:

  A copy of the partial signatures is not required before serializing them.

  For reference, this was found by switching the codebase to `std::span` (not sure why it wasn't found with `Span` though):

  ```
  ./psbt.h:240:23: error: loop variable is copied but only used as const reference; consider making it a const reference [performance-for-range-copy,-warnings-as-errors]
    240 |             for (auto sig_pair : partial_sigs) {
        |                       ^
        |                  const  &

ACKs for top commit:
  tdb3:
    ACK fab01b5220c28a334b451ed9625bd3914c48e6af
  theStack:
    utACK fab01b5220c28a334b451ed9625bd3914c48e6af

Tree-SHA512: b55513d8191118499716684190ee568d171b50ae9171d246ca6e047f0cfd3ec14c9453d721e88af55e47bb41fa66cbafdbfb47bc5f9b8d82789e0a9b634b371b
2024-06-10 09:21:19 +01:00
MarcoFalke
0000276b31
test: Remove redundant verack check 2024-06-10 07:58:10 +02:00
MarcoFalke
fa780e1c25
build: Remove --enable-gprof
This reverts cfaac2a60f3ac63ae8deccb03d88bd559449b78c
2024-06-09 22:45:29 +02:00
Sebastian Falbesoner
d1581c6048 test: doc: fix units in tx size standardness test (s/vbytes/weight units) 2024-06-09 13:55:28 +02:00
MarcoFalke
fab01b5220
refactor: performance-for-range-copy in psbt.h 2024-06-09 13:07:35 +02:00
merge-script
a44b0f771f
Merge bitcoin/bitcoin#30238: json-rpc 2.0 followups: docs, tests, cli
1f6ab1215bbb1f8a5f1743c3c413b95ad08090df minor: remove unnecessary semicolons from RPC content type examples (Matthew Zipkin)
b22529529823c0cb5916ac318c8536e9107b7e78 test: use json-rpc 2.0 in all functional tests by default (Matthew Zipkin)
391843b0297db03d71a8d88ab77609e2ad230bf2 bitcoin-cli: use json-rpc 2.0 (Matthew Zipkin)
d39bdf339772166a5545ae811e58b7764af093a8 test: remove unused variable in interface_rpc.py (Matthew Zipkin)
0ead71df8c83a2f9eae1220544ec84dcf38a0326 doc: update and link for JSON-RPC 2.0 (Matthew Zipkin)

Pull request description:

  This is a follow-up to #27101.

  - Addresses [post-merge comments ](https://github.com/bitcoin/bitcoin/pull/27101#discussion_r1606723428)
  - bitcoin-cli uses JSON-RPC 2.0
  - functional tests use JSON-RPC 2.0 by default (exceptions are in the regression tests added by #27101)

ACKs for top commit:
  tdb3:
    ACK 1f6ab1215bbb1f8a5f1743c3c413b95ad08090df
  cbergqvist:
    ACK 1f6ab1215bbb1f8a5f1743c3c413b95ad08090df

Tree-SHA512: 49bf14c70464081280216ece538a2f5ec810bac80a86a83ad3284f0f1b017edf755a1a74a45be279effe00218170cafde7c2de58aed07097a95c2c6b837a6b6c
2024-06-08 09:33:49 +01:00
merge-script
2ad6e8efa3
Merge bitcoin/bitcoin#30231: guix: bump time-machine to f0bb724211872cd6158fce6162e0b8c73efed126
2599655c1fb8e7d0b8407d2be249977372cb73ff guix: bump time-machine to f0bb724211872cd6158fce6162e0b8c73efed126 (fanquake)

Pull request description:

  Includes:
  LLVM 18.1.x (#30201)
  GCC 13.x (#29881)

  git-minimal 2.41.0 -> 2.45.1
  Kernel Headers 6.1.80 -> 6.1.92
  moreutils 0.68 -> 0.69

  Commits like https://git.savannah.gnu.org/cgit/guix.git/commit/?id=7b0f145802f0c2c785014293d748721678fef824, which should improve the bootstrap situation (#30042). This can somewhat be visualised by comparing the (simplified) dependencies of guix itself, between the two time-machines.

  Master:
  ![master_2](https://github.com/bitcoin/bitcoin/assets/863730/714402a2-345e-43c7-974b-5112d03d44c2)

  PR:
  ![pr](https://github.com/bitcoin/bitcoin/assets/863730/7079a155-e013-4d59-9ea1-21a64d71e2d8)

  Note that in the case of this PR, we are better off, no-longer having to build a number of tex packages, ruby, cairo, graphics libs, openssl 1.x etc.

ACKs for top commit:
  TheCharlatan:
    ACK 2599655c1fb8e7d0b8407d2be249977372cb73ff

Tree-SHA512: 9c5675a5d563c17744c89c8a392bc7865aa1c9e71a5e3044c23f31e51458dac28c0c238d2055c86dc732df595dae60bcbc8b85266b23b7991c4c770d56f7d23a
2024-06-08 09:29:39 +01:00