build: Avoid remaking makefiles. #22237

pull dgoncharov wants to merge 397 commits into bitcoin:master from dgoncharov:avoid_rebuilding_makefiles changing 319 files +8819 −4429
  1. dgoncharov commented at 8:25 pm on June 13, 2021: none

    The purpose of this commit is to reduce the amount of work make does. This simplifies make -d output and improves performance (this performance gain is hardly noticeable).

    By default make remakes all makefiles. This build system does not have rules to remake makefiles. This commit adds an explicit rule for each makefile.

    Each rule serves 2 purposes.

    1. Each rule prevents make from searching for an implicit rule.
    2. Once found, the rule prevents make from remaking the makefile. That’s why the rule is double colon. Make won’t use a double colon rule to remake a makefile. See https://www.gnu.org/software/make/manual/make.html#Remaking-Makefiles.

    $ # on this branch. $ make -d print-host |grep expat Reading makefile ‘packages/expat.mk’ (search path) (no ~ expansion)… Makefile ‘packages/expat.mk’ might loop; not remaking it. $ git co master Switched to branch ‘master’ Your branch is up-to-date with ‘origin/master’. $ make -d print-host |grep expat |wc 367 1916 19918 $

    Make prints 367 lines per makefile. With this change make prints 2 lines per makefile.

  2. DrahtBot commented at 9:39 pm on June 13, 2021: member

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

  3. DrahtBot added the label Build system on Jun 13, 2021
  4. dongcarl commented at 4:17 pm on June 16, 2021: member
    Are there any global flags/env vars for make we can set to accomplish this instead?
  5. dgoncharov commented at 4:41 pm on June 16, 2021: none

    Make tries rebuilding makefiles. Even if the user does not specify a makefile and there is no need for a makefile, then still make tries updating the default makefiles.

    -r will affect the lookup. So, when -r is specified make will not search for a builtin rule. But make -r will still try updating the makefile.

    A double colon rule is the mechanism which causes make (atleast the current implementation) to skip updating the makefile.

  6. move-only(ish): don't expose CCoinsViewDBCursor
    No need for this to be a part of the header anymore.
    
    Includes a small reference type style change.
    0f8a5a4dd5
  7. doc: add comment about CCoinsViewDBCursor constructor 7ad414f4bf
  8. consensus refactor: extract ComputeTapleafHash, ComputeTaprootMerkleRoot 29e5dd1a5b
  9. Report address as solvable based on inferred descriptor c7388e5ada
  10. Taproot descriptor inference d637a9b397
  11. fuzz: add missing ECCVerifyHandle to base_encode_decode 906d791311
  12. Merge bitcoin/bitcoin#22210: test: Use MiniWallet in test_no_inherited_signaling RBF test
    fa7d71f270b89c9d06230d4ff262646f9ea29f4a test: Run pep-8 on touched test (MarcoFalke)
    fab7e99c2a4b02a41b7448b45f0e6cdfdbb53ac3 test: Use MiniWallet in test_no_inherited_signaling RBF test (MarcoFalke)
    fab871f649e3da4a5a5f6cffac3fc748bb1ca900 test: Remove unused generate() from test (MarcoFalke)
    faff3f35b778d9af3d649b303d7edab49bfe40b4 test: Add txin.sequence option to MiniWallet (MarcoFalke)
    
    Pull request description:
    
      This comes with nice benefits:
      * Less code and complexity
      * Test can be run without wallet compiled in
    
      Also add some additional checks for `getmempoolentry` (#22209) and other cleanups :art:
    
    ACKs for top commit:
      mjdietzx:
        Tested ACK fa7d71f270b89c9d06230d4ff262646f9ea29f4a thanks for the explanations, nicely done
      theStack:
        ACK fa7d71f270b89c9d06230d4ff262646f9ea29f4a 🍷
    
    Tree-SHA512: 0e9b8fe985779d8d7034d256deed627125bb374b6ae2972c461b3a220739a51061c6147ad69339bee16282f82716c7f3f8a7a89c693ceb1e47ea50709272332a
    e172ea8804
  13. Merge bitcoin/bitcoin#22279: fuzz: add missing ECCVerifyHandle to base_encode_decode
    906d7913117c8f10934b37afa27ae8ac565da042 fuzz: add missing ECCVerifyHandle to base_encode_decode (Andrew Poelstra)
    
    Pull request description:
    
      It is possible to trigger a fuzztest failure in the `base_encode_decode` by asking it to decode any PSBT that has HD keypaths in it. For example, this one
    
      ```
      cHNidP8BAFUCAAAAASeaIyOl37UfxF8iD6WLD8E+HjNCeSqF1+Ns1jM7XLw5AAAAAAD/////AaBa6gsAAAAAGXapFP/pwAYQl8w7Y28ssEYPpPxCfStFiKwAAAAAAAEBIJVe6gsAAAAAF6kUY0UgD2jRieGtwN8cTRbqjxTA2+uHIgIDsTQcy6doO2r08SOM1ul+cWfVafrEfx5I1HVBhENVvUZGMEMCIAQktY7/qqaU4VWepck7v9SokGQiQFXN8HC2dxRpRC0HAh9cjrD+plFtYLisszrWTt5g6Hhb+zqpS5m9+GFR25qaAQEEIgAgdx/RitRZZm3Unz1WTj28QvTIR3TjYK2haBao7UiNVoEBBUdSIQOxNBzLp2g7avTxI4zW6X5xZ9Vp+sR/HkjUdUGEQ1W9RiED3lXR4drIBeP4pYwfv5uUwC89uq/hJ/78pJlfJvggg71SriIGA7E0HMunaDtq9PEjjNbpfnFn1Wn6xH8eSNR1QYRDVb1GELSmumcAAACAAAAAgAQAAIAiBgPeVdHh2sgF4/iljB+/m5TALz26r+En/vykmV8m+CCDvRC0prpnAAAAgAAAAIAFAACAAAA=
      ```
    
      which I took straight from the PSBT test vectors. The reason is that in src/psbt.h we call `DeserializeHDKeypaths`, which in turn calls `CPubKey::IsFullyValid`, which in turn asserts that a secp context has been created.
    
      The error appears to be masked on many systems by the definition of `instance_of_eccryptoclosure` in src/script/bitcoinconsensus.cpp, which defines a static object which contains an `ECCVerifyHandle`. If you just comment out that line you can reliably trigger the fuzz test failure, e.g. by creating a file `crash` with the above PSBT, and runnnig
    
      ```
      ASAN_OPTIONS=symbolize=0:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1 UBSAN_OPTIONS=suppressions=./test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1 FUZZ=base_encode_decode ./src/test/fuzz/fuzz -seed_inputs=crash
      ```
    
    ACKs for top commit:
      practicalswift:
        cr ACK 906d7913117c8f10934b37afa27ae8ac565da042
    
    Tree-SHA512: b98b60573c21efe28503fe351883c6f0d9ac99d0dd6f100537b16ac53476617b8a3f899faf0c23d893d34a01b3bbe4a784499ec6f9c7000292e850bed449bd85
    965e937434
  14. Merge bitcoin/bitcoin#22244: devtools: Correctly extract symbol versions in symbol-check
    e8cd3700eeb27437f5ea435869c9d61214285fdd devtools: Integrate ARCH_MIN_GLIBC_VER table into MAX_VERSIONS in symbol-check.py (W. J. van der Laan)
    a33381acf5ae2b43616fffaf26b1c8962e8ef0bb devtools: Add xkb version to symbol-check (W. J. van der Laan)
    19e598bab0a1cb5ad93321eb9fa25d1a58d5e276 devtools: Fix verneed section parsing in pixie (W. J. van der Laan)
    
    Pull request description:
    
      I misunderstood the ELF specification for version symbols (verneed): The `vn_aux` pointer is relative to the main verneed record, not the start of the section.
    
      This caused many symbols to not be versioned properly in the return value of `elf.dyn_symbols`. This was discovered in #21454.
    
      Fix it by correcting the offset computation.
    
      - xkb versions symbols (using the prefix `V`), as this library is used by bitcoin-qt, add it to the valid versions in `symbol-check.py`
    
      This unfortunately brings to light some symbols that have been introduced since and weren't caught (from a gitian compile of master):
    
      ```
      bitcoin-cli: symbol getrandom from unsupported version GLIBC_2.25
      bitcoin-cli: failed IMPORTED_SYMBOLS
      bitcoind: symbol getrandom from unsupported version GLIBC_2.25
      bitcoind: symbol log from unsupported version GLIBC_2.29
      bitcoind: symbol fcntl64 from unsupported version GLIBC_2.28
      bitcoind: symbol pow from unsupported version GLIBC_2.29
      bitcoind: symbol exp from unsupported version GLIBC_2.29
      bitcoind: failed IMPORTED_SYMBOLS
      bitcoin-qt: symbol exp from unsupported version GLIBC_2.29
      bitcoin-qt: symbol fcntl64 from unsupported version GLIBC_2.28
      bitcoin-qt: symbol log from unsupported version GLIBC_2.29
      bitcoin-qt: symbol pow from unsupported version GLIBC_2.29
      bitcoin-qt: symbol statx from unsupported version GLIBC_2.28
      bitcoin-qt: symbol getrandom from unsupported version GLIBC_2.25
      bitcoin-qt: symbol renameat2 from unsupported version GLIBC_2.28
      bitcoin-qt: symbol getentropy from unsupported version GLIBC_2.25
      bitcoin-qt: failed IMPORTED_SYMBOLS
      bitcoin-wallet: symbol exp from unsupported version GLIBC_2.29
      bitcoin-wallet: symbol log from unsupported version GLIBC_2.29
      bitcoin-wallet: symbol fcntl64 from unsupported version GLIBC_2.28
      bitcoin-wallet: failed IMPORTED_SYMBOLS
      test_bitcoin: symbol getrandom from unsupported version GLIBC_2.25
      test_bitcoin: symbol log from unsupported version GLIBC_2.29
      test_bitcoin: symbol fcntl64 from unsupported version GLIBC_2.28
      test_bitcoin: symbol pow from unsupported version GLIBC_2.29
      test_bitcoin: symbol exp from unsupported version GLIBC_2.29
      test_bitcoin: failed IMPORTED_SYMBOLS
      ```
    
    ACKs for top commit:
      hebasto:
        ACK e8cd3700eeb27437f5ea435869c9d61214285fdd
    
    Tree-SHA512: 8c15e3478eb642f01a1ddaadef03f80583f088f9fa8e3bf171ce16b0ec05ffb4675ec147d7ffc6a4360637ed47fca517c6ca2bac7bb30d794c03783cfb964b79
    a305a687e7
  15. Merge bitcoin/bitcoin#22147: p2p: Protect last outbound HB compact block peer
    30aee2dfe671b347438c1c327c6f79edfacff1ce tests: Add test for compact block HB selection (Pieter Wuille)
    6efbcec4ded6116a42d2783c96c60ef0f255a1b2 Protect last outbound HB compact block peer (Suhas Daftuar)
    
    Pull request description:
    
      If all our high-bandwidth compact block serving peers (BIP 152) stall block
      download, then we can be denied a block for (potentially) a long time. As
      inbound connections are much more likely to be adversarial than outbound
      connections, mitigate this risk by never removing our last outbound HB peer if
      it would be replaced by an inbound.
    
    ACKs for top commit:
      achow101:
        ACK 30aee2dfe671b347438c1c327c6f79edfacff1ce
      ariard:
        Code ACK 30aee2dfe
      jonatack:
        ACK 30aee2dfe671b347438c1c327c6f79edfacff1ce
    
    Tree-SHA512: 5c6c9326e3667b97e0864c371ae2174d2be9054dad479f4366127b9cd3ac60ffa01ec9707b16ef29cac122db6916cf56fd9985733390017134ace483278921d5
    f6a25bea82
  16. Merge bitcoin/bitcoin#19033: http: Release work queue after event base finish
    4e353cb618745cdb5d98e58e7dcd400ded01299a http: Release work queue after event base finish (João Barbosa)
    
    Pull request description:
    
      This fixes a race between `http_request_cb` and `StopHTTPServer` where
      the work queue is used after release.
    
      Fixes #18856.
    
    ACKs for top commit:
      fjahr:
        Code review ACK 4e353cb618745cdb5d98e58e7dcd400ded01299a
      achow101:
        ACK 4e353cb618745cdb5d98e58e7dcd400ded01299a
      LarryRuane:
        ACK 4e353cb618745cdb5d98e58e7dcd400ded01299a
      hebasto:
        ACK 4e353cb618745cdb5d98e58e7dcd400ded01299a, tested (rebased on top of master 9313c4e6aa4b707c06a86b33d5d2753cd8383340) on Linux Mint 20.1 (x86_64) using MarcoFalke's [patch](https://github.com/bitcoin/bitcoin/pull/19033#issuecomment-640106647), including different `-rpcthreads`/`-rpcworkqueue` cases. The bug is fixed. The code is correct.
    
    Tree-SHA512: 185d2a9744d0d5134d782bf321ac9958ba17b11a5b3d70b4897c8243e6b146dfd3f23c57aef8e10ae9484374120b64389c1949a9cf0a21dccc47ffc934c20930
    6a67366fdc
  17. test: introduce `tx_from_hex` helper for tx deserialization
    `FromHex` is mostly used for transactions, so we introduce a
    shortcut `tx_from_hex` for `FromHex(CTransaction, hex_str)`.
    2ce7b47958
  18. test: remove `ToHex` helper, use .serialize().hex() instead a79396fe5f
  19. scripted-diff: test: rename `FromHex` to `from_hex`
    -BEGIN VERIFY SCRIPT-
    sed -i 's/\<FromHex\>/from_hex/g' $(git grep -l FromHex)
    -END VERIFY SCRIPT-
    
    Co-authored-by: MarcoFalke <falke.marco@gmail.com>
    1914054208
  20. test: doc: improve doc for `from_hex` helper (mention `to_hex` alternative) bdb8b9a347
  21. banman: save the banlist in a JSON format on disk
    Save the banlist in `banlist.json` instead of `banlist.dat`.
    
    This makes it possible to store Tor v3 entries in the banlist on disk
    (and any other addresses that cannot be serialized in addrv1 format).
    
    Only read `banlist.dat` if it exists and `banlist.json` does not
    exist (first start after an upgrade).
    
    Supersedes https://github.com/bitcoin/bitcoin/pull/20904
    Resolves https://github.com/bitcoin/bitcoin/issues/19748
    d197977ae2
  22. test: ensure banlist can be read from disk after restart
    With `banlist.dat` (being written in addrv1 format) if we would try to
    write a Tor v3 subnet, it would serialize as a dummy-all-0s IPv6
    address and subsequently, when deserialized will not result in the same
    subnet.
    
    This problem does not exist with `banlist.json` where the data is saved
    in textual, human-readable form.
    dd4e957dcd
  23. doc: fix grammar in doc/files.md 24b10ebda3
  24. style: remove () from assert in rpc_setban.py bb719a08db
  25. Merge bitcoin/bitcoin#21056: rpc: Add a `-rpcwaittimeout` parameter to limit time spent waiting
    b9e76f1bf08c52fcd402b2314e00db4ad247ebc8 rpc: Add test for -rpcwaittimeout (Christian Decker)
    f76cb10d7dc9a7b0c55d28011161606399417664 rpc: Prefix rpcwaittimeout error with details on its nature (Christian Decker)
    c490e17ef698a1695050f82ef6567b3b87a21861 doc: Add release notes for the `-rpcwaittimeout` cli parameter (Christian Decker)
    a7fcc8eb59fe51473571661316214156fbdbdcae rpc: Add a `-rpcwaittimeout` parameter to limit time spent waiting (Christian Decker)
    
    Pull request description:
    
      Adds a new numeric `-rpcwaittimeout` that can be used to limit the
      time we spend waiting on the RPC server to appear. This is used by
      downstream projects to provide a bit of slack when `bitcoind`s RPC
      interface is not available right away.
    
      This makes the `-rpcwait` argument more useful, since we can now limit
      how long we'll ultimately wait, before potentially giving up and reporting
      an error to the caller. It was discussed in the context of the BTCPayServer
      wanting to have c-lightning wait for the RPC interface to become available
      but still have the option of giving up eventually ([4355]).
    
      I checked with laanwj whether this is already possible ([comment]), and
      whether this would be a welcome change. Initially I intended to repurpose
      the (optional) argument to `-rpcwait`, however I decided against it since it
      would potentially break existing configurations, using things like `rpcwait=1`,
      or `rpcwait=true` (the former would have an unintended short timeout, when
      old behavior was to wait indefinitely).
    
      ~Due to its simplicity I didn't implement a test for it yet, but if that's desired I
      can provide one.~ Test was added during reviews.
    
      [4355]: https://github.com/ElementsProject/lightning/issues/4355
      [comment]: https://github.com/ElementsProject/lightning/issues/4355#issuecomment-768288261
    
    ACKs for top commit:
      laanwj:
        Code review ACK b9e76f1bf08c52fcd402b2314e00db4ad247ebc8
      promag:
        ACK b9e76f1bf08c52fcd402b2314e00db4ad247ebc8.
    
    Tree-SHA512: 3cd6728038ec7ca7c35c2e7ccb213bfbe963f99a49bb48bbc1e511c4dd23d9957c04f9af1f8ec57120e47b26eaf580b46817b099d5fc5083c98da7aa92db8638
    6556da77d7
  26. Merge bitcoin/bitcoin#22089: test: MiniWallet: fix fee calculation for P2PK and check tx vsize
    d6d2ab984547be4a9f7ba859a2a4c9ac9bfbf206 test: MiniWallet: fix fee calculation for P2PK and check tx vsize (Sebastian Falbesoner)
    ce024b1c0ef2dcd307023aaaab40373c8bf17db1 test: MiniWallet: force P2PK signature to have fixed size (71 bytes) (Sebastian Falbesoner)
    
    Pull request description:
    
      This PR is a follow-up to #21945. It aims to both fix the fee calculation for P2PK mode transactions and enable its vsize check. Currently, the latter assumes a fixed tx length, which is fine for anyone-can-spend txs but doesn't apply to P2PK output spends due to varying DER signature size; the vsize check is therefore disabled for P2PK mode on master branch.
    
      Creating one million DER signatures with MiniWallet shows the following distribution of sizes (smart people with better math skills probably could deduce the ratios without trying, but hey):
    
      | DER signature size [bytes]  | #occurences (ratio) |
      | ------------- | ------------- |
      | 71  | 498893 (49.89%) |
      | 70 | 497244 (49.72%) |
      | 69 | 3837 (0.38%) |
      | 68 | 22 (0.0022%) |
    
      Note that even smaller signatures are possible (for smaller R and S values with leading zero bytes), it's just that the probability decreases exponentially.     Instead of choosing a large vsize check range and hoping that smaller signatures are never created (potentially leading to flaky tests), the proposed solution is ~~to limit the signature size to the two most common sizes 71 and 70 (>99.6% probability) and then accordingly only check for two vsize values; the value to be used for fee calculation is a decimal right between the two possible sizes (167.5 vbytes) and for the vsize check it's rounded down/up integer values are used.~~ to simply grind the signature to a fixed size of 71 bytes (49.89% probability, i.e. on average each call to `sign_tx()`, on average two ECC signing operations are needed).
    
      ~~The idea of grinding signatures to a fixed size (similar to https://github.com/bitcoin/bitcoin/pull/13666 which grinds to low-R values) would be counter-productive, as the signature creation in the test suite is quite expensive and this would significantly slow down tests that calculate hundreds of signatures (like e.g. feature_csv_activation.py).~~
    
      For more about transaction sizes on different input/output types, see the following interesting article: https://medium.com/coinmonks/on-bitcoin-transaction-sizes-97e31bc9d816
    
    ACKs for top commit:
      MarcoFalke:
        Concept ACK d6d2ab984547be4a9f7ba859a2a4c9ac9bfbf206
    
    Tree-SHA512: 011c70ee0e4adf9ba12902e4b6c411db9ae96bdd8bc810bf1d67713367998e28ea328394503371fc1f5087a819547ddaea56c073b28db893ae1c0031d7927f32
    74013641e0
  27. doc: Final merge of release notes snippets fa09fd1a09
  28. add dummy file param to fix jupyter
    testshell in jupyter was failing due to an extra arg.
    this adds a dummy -f param, which allows TestShell to
    be used in a command line or jupyter environment
    168b6c317c
  29. Merge bitcoin/bitcoin#22296: doc: Final merge of release notes snippets, mv to wiki
    fa09fd1a0986aba918c5740f4c041ff2c7a7bae7 doc: Final merge of release notes snippets (MarcoFalke)
    
    Pull request description:
    
      None of the remaining pulls tagged for 22.0 have snippets, so merge them and move them to the wiki.
    
      Trivial to review with `--color-moved=dimmed-zebra`.
    
    ACKs for top commit:
      laanwj:
        ACK fa09fd1a0986aba918c5740f4c041ff2c7a7bae7
      jonatack:
        ACK fa09fd1a0986aba918c5740f4c041ff2c7a7bae7
    
    Tree-SHA512: d5d272a9fc2217a87988efa189000cae5330da22f0459dd5e4340a18aba3d67d8fe8661016cb777e2e15f5d137c1c2b3de7d576c942eaf4201dabdc4e9c783f4
    398dd67833
  30. [test] Allow AddrReceiver to be used more generally
    The `on_addr` functionality of `AddrReceiver` tests logic specific to how the
    addr messages are set up in the test bodies. To allow other callers to also use
    `AddrReceiver`, only apply the assertion logic if the caller indicates
    desirability by setting `test_addr_contents` to true when initializing the
    class.
    09dc073cff
  31. [test] Add functionality to AddrReceiver
    Add two simple helper functions to `AddrReceiver` to support callers currently
    using `GetAddrStore` [used in next commit].
    e8c67ea19a
  32. [test] Update GetAddrStore callers to use AddrReceiver ef2f149bf2
  33. [test] Remove GetAddrStore class 1d8193e2a2
  34. [test] Prevent intermittent issue
    Since m_next_addr_send is on a Poisson distribution, increase the mocktime bump
    to ensure we don't experience flakiness in the tests. Closes #22243.
    6168eb06b2
  35. Merge bitcoin/bitcoin#22201: test: Fix TestShell to allow running in Jupyter Notebook
    168b6c317ca054c1287c36be532964e861f44266 add dummy file param to fix jupyter (Josiah Baker)
    
    Pull request description:
    
      this fixes argparse to use `parse_known_args`. previously, if an unknown argument was passed, argparse would fail with an `unrecognized arguments: %s` error.
    
      ## why
      the documentation mentions being able to run `TestShell` in a REPL interpreter or a jupyter notebook. when i tried to run inside a jupyter notebook, i got the following error:
    
      ![image](https://user-images.githubusercontent.com/7444140/121382910-57554880-c947-11eb-94f2-49da8679528c.png)
    
      this was due to the notebook passing the filename of the notebook as an argument. this is a known problem with notebooks and argparse, documented here: https://stackoverflow.com/questions/48796169/how-to-fix-ipykernel-launcher-py-error-unrecognized-arguments-in-jupyter
    
      ## testing
      to test, make sure you have jupyter notebooks installed. you can do this by running:
      ```
      pip install notebook
      ```
      or following instructions from [here](https://jupyterlab.readthedocs.io/en/stable/getting_started/installation.html).
    
      once installed, start a notebook (`jupyter notebook`), launch a python3 kernel and run the following snippet:
    
      ```python
      import sys
    
      # make sure this is the path for your system
      sys.path.insert(0, "/path/to/bitcoin/test/functional")
      from test_framework.test_shell import TestShell
    
      test = TestShell().setup(num_nodes=2, setup_clean_chain=True)
      ```
    
      you should see the following output, without errors:
      ![image](https://user-images.githubusercontent.com/7444140/121383301-a307f200-c947-11eb-83b6-6c50b2cada25.png)
    
      if you are unfamiliar with notebooks, here is a short guide on using them: https://jupyter.readthedocs.io/en/latest/running.html
    
    ACKs for top commit:
      MarcoFalke:
        review ACK 168b6c317ca054c1287c36be532964e861f44266
      jamesob:
        crACK https://github.com/bitcoin/bitcoin/pull/22201/commits/168b6c317ca054c1287c36be532964e861f44266
      practicalswift:
        cr ACK 168b6c317ca054c1287c36be532964e861f44266
    
    Tree-SHA512: 4fee1563bf64a1cf9009934182412446cde03badf2f19553b78ad2cb3ceb0e5e085a5db41ed440473494ac047f04641311ecbba3948761c6553d0ca4b54937b4
    672870ab7b
  36. wallet: Add missing BlockUntilSyncedToCurrentChain fadb55085a
  37. Revert "test: Add temporary logging to debug #20975"
    This reverts commit faa94961d6e38392ba068381726ed4e033367b03.
    fa27baa9c8
  38. add missing atomic include fa2d21fec8
  39. Merge bitcoin/bitcoin#22309: blockstorage: Add missing atomic include
    fa2d21fec8e532aa0781211e198ee6098f89350e add missing atomic include (MarcoFalke)
    
    Pull request description:
    
      `std::atomic` is used in the file, so to avoid compile issues, add the missing include.
    
    ACKs for top commit:
      practicalswift:
        cr ACK fa2d21fec8e532aa0781211e198ee6098f89350e
      jamesob:
        crACK https://github.com/bitcoin/bitcoin/pull/22309/commits/fa2d21fec8e532aa0781211e198ee6098f89350e
      hebasto:
        ACK fa2d21fec8e532aa0781211e198ee6098f89350e, I have reviewed the code and it looks OK, I agree it can be merged.
      prayank23:
        crACK https://github.com/bitcoin/bitcoin/pull/22309/commits/fa2d21fec8e532aa0781211e198ee6098f89350e
    
    Tree-SHA512: 307b15abd62006be4457b2437fb65de517c296bf0417e8acd181904eb6056dba5655dd5bc43b834bf68a087d06637f5e99ba5a6bc8be3e12388cea470dc155d0
    327e2691f6
  40. scripted-diff: Renames
    -BEGIN VERIFY SCRIPT-
    
     ren() { sed -i "s/\<$1\>/$2/g" test/functional/p2p_blockfilters.py ; }
    
     # Rename from "node" to "peer" to avoid confusion with self.nodes
     ren node0 peer_0
     ren node1 peer_1
    
     # Remove the confusing "C" prefix
     ren CFiltersClient FiltersClient
    
    -END VERIFY SCRIPT-
    facd97ae0f
  41. test: Run pep-8
    Can be reviewed with --word-diff-regex=.
    fa1668bf50
  42. test: Misc cleanup
    * Replace wait_until with assert_equal where possible
    * Use send_and_ping helper where possible
    faa211fc6e
  43. test: Add missing syncwithvalidationinterfacequeue fadddd13ee
  44. test: Add missing sync_all to feature_coinstatsindex fafd9165e9
  45. GUI: Enable palette change adaptation on all platforms c901d4d8ce
  46. GUI: Always call parent changeEvent handler 9d5bf6bf01
  47. Merge bitcoin/bitcoin#22308: wallet: Add missing BlockUntilSyncedToCurrentChain
    fa27baa9c8a13239625e5a7b6c472d236fe5b9fa Revert "test: Add temporary logging to debug #20975" (MarcoFalke)
    fadb55085a02c9e355617bcb5f84b6335e4f8c9d wallet: Add missing BlockUntilSyncedToCurrentChain (MarcoFalke)
    
    Pull request description:
    
      Fixes #20975
    
      Also replace the wallet pointer by a reference
    
    ACKs for top commit:
      achow101:
        ACK fa27baa9c8a13239625e5a7b6c472d236fe5b9fa
    
    Tree-SHA512: 79047a30998104a12c2ff84a8e3cc5207151410bbe92b74cfedbe1c1aca3ffa5909391607fc597f3a3cf0725fa827528a4c57edaeacc8360536b1965e166be6a
    c93e123dc7
  48. Limit LegacyScriptPubKeyMan address types
    Make sure that LegacyScriptPubKeyMan can only be used for legacy,
    p2sh-segwit, and bech32 address types.
    177c15d2f7
  49. Add OutputType::BECH32M
    Bech32m addresses need their own OutputType
    
    We are not ready to create DescriptorScriptPubKeyMans which produce
    bech32m addresses. So don't allow generating them.
    0262536c34
  50. Opportunistically use bech32m change addresses if available
    If a transaction as a segwit output, use a bech32m change address if
    they are available. If not, fallback to bech32. If bech32 change
    addresses are unavailable, fallback to the default address type.
    699dfcd8ad
  51. Use BECH32M for tr() desc, WitV1Taproot, and WitUnknown CTxDests
    The tr() descriptor, WitnessV1Taproot CTxDestination, and
    WitnessUnknown CTxDestination are OutputType::BECH32M so they should
    report as such.
    6dbe4d1072
  52. Disallow bech32m addresses for legacy wallet things
    We don't want the legacy wallet to ever have bech32m addresses so don't
    allow importing them. This includes addmultisigaddress as that is a
    legacy wallet only RPC
    
    Additionally, bech32m multisigs are not available yet, so disallow them
    in createmultisig.
    87a0e7a3b7
  53. wallet: Add error message to GetReservedDestination
    Adds an error output parameter to all GetReservedDestination functions
    so that callers can get the actual reason that a change address could
    not be fetched. This more closely matches GetNewDestination. This allows
    for more granular error messages, such as one that indicates that
    bech32m addresses cannot be generated yet.
    754f134a50
  54. Merge bitcoin/bitcoin#22313: test: Add missing sync_all to feature_coinstatsindex
    fafd9165e911bf33d6212ca8a613b71878c82449 test: Add missing sync_all to feature_coinstatsindex (MarcoFalke)
    
    Pull request description:
    
      Sync the blocks before invalidating them to ensure all nodes are on the right tip. Otherwise nodes[0] might stay on the "stale" block and the test fails (intermittently)
    
    ACKs for top commit:
      jamesob:
        crACK https://github.com/bitcoin/bitcoin/pull/22313/commits/fafd9165e911bf33d6212ca8a613b71878c82449
    
    Tree-SHA512: ca567b97b839b56c91d52831eaac18d8c843d376be90c9fd8b49d2eb4a46b801a1d2402996d5dfe2bef3e2c9bd75d19ed443e3f42cc4679c5f20043ba556efc8
    03aa59a4e5
  55. build: set minimum required Boost to 1.64.0 2bf211696b
  56. build: remove workaround for Boost and std::atomic df2c933217
  57. build: remove check for Boost Process header
    Now that we require Boost 1.64.0+, Boost Process will be available.
    957f358427
  58. Merge bitcoin/bitcoin#20966: banman: save the banlist in a JSON format on disk
    bb719a08db173a753984a04534de6f148b87b17a style: remove () from assert in rpc_setban.py (Vasil Dimov)
    24b10ebda301548b8ff4b0c73fefc367ad5dc22b doc: fix grammar in doc/files.md (Vasil Dimov)
    dd4e957dcdfc971a4a971995ff2db9fb787d23c3 test: ensure banlist can be read from disk after restart (Vasil Dimov)
    d197977ae2076903ed12ab7616a7f93e88be02e1 banman: save the banlist in a JSON format on disk (Vasil Dimov)
    
    Pull request description:
    
      Save the banlist in `banlist.json` instead of `banlist.dat`.
    
      This makes it possible to store Tor v3 entries in the banlist on disk
      (and any other addresses that cannot be serialized in addrv1 format).
    
      Only read `banlist.dat` if it exists and `banlist.json` does not exist (first start after an upgrade).
    
      Supersedes https://github.com/bitcoin/bitcoin/pull/20904
      Resolves https://github.com/bitcoin/bitcoin/issues/19748
    
    ACKs for top commit:
      jonatack:
        Code review re-ACK bb719a08db173a753984a04534de6f148b87b17a per `git range-diff 6a67366 4b52c72 bb719a0`
      achow101:
        Code Review ACK bb719a08db173a753984a04534de6f148b87b17a
    
    Tree-SHA512: fc135c3a1fe20bcf5d008ce6bea251b4135e56c78bf8f750b4bd8144c095b81ffe165133cdc7e4715875eec7e7c4e13ad9f5d2450b21102af063d7c8abf716b6
    d6e0d78c31
  59. doc: add basic I2P documentation cad487bcfa
  60. doc: sort entries in doc/README.md#Miscellaneous alphabetically 78cdab1ad2
  61. Merge bitcoin/bitcoin#22166: Add support for inferring tr() descriptors
    d637a9b397816e34652d0c4d383308e39770737a Taproot descriptor inference (Pieter Wuille)
    c7388e5ada394b7fe94d6263fb02e9dd28ab367e Report address as solvable based on inferred descriptor (Pieter Wuille)
    29e5dd1a5b9a1879e6c3c7e153b2e6f33a79e905 consensus refactor: extract ComputeTapleafHash, ComputeTaprootMerkleRoot (Pieter Wuille)
    
    Pull request description:
    
      Includes:
      * First commit from #21365, adding TaprootSpendData in SigningProvider
      * A refactor to expose ComputeTapleafHash and ComputeTaprootMerkleRoot from script/interpreter
      * A tiny change to make `getaddressinfo` report tr() descriptors as solvable (so that inferred descriptors are shown), despite not having signing code for them.
      * Logic to infer the script tree back from TaprootSpendData, and then use that to infer descriptors.
    
    ACKs for top commit:
      achow101:
        re-ACK d637a9b397816e34652d0c4d383308e39770737a
      Sjors:
        re-utACK d637a9b
      meshcollider:
        Code review ACK d637a9b397816e34652d0c4d383308e39770737a
    
    Tree-SHA512: 5ab9b95da662382d8549004be4a1297a577d7caca6b068f875c7c9343723931d03fa9cbf133de11f83b74e4851490ce820fb80413c77b9e8495a5f812e505d86
    567670bec5
  62. script, doc: spelling update 184d4534f6
  63. cli: Avoid truncating -rpcwaittimeout fa34cb8024
  64. Merge bitcoin/bitcoin#22323: doc: spelling update
    184d4534f6f9633d930f288184ca5248333c8ca2 script, doc: spelling update (Jon Atack)
    
    Pull request description:
    
      Clears out the report from `test/lint/lint-spelling.sh` and touches up the leftover nits in https://github.com/bitcoin/bitcoin/pull/22166#pullrequestreview-690454669. Happy to add any others people are aware of.
    
    ACKs for top commit:
      MarcoFalke:
        cr ACK 184d4534f6f9633d930f288184ca5248333c8ca2
      Sjors:
        utACK 184d453
    
    Tree-SHA512: 3b0ef6bd5ff227363b0bda79eeb66763151c74f607bc3a2a7bfe7823e3eef196587bccfe639e714e8e27b918ba57e8317eda06f225143c32c736685087dbcd24
    c0e30933e0
  65. Merge bitcoin/bitcoin#22263: refactor: wrap CCoinsViewCursor in unique_ptr
    7ad414f4bfa74595ee5726e66f3527045c02a977 doc: add comment about CCoinsViewDBCursor constructor (James O'Beirne)
    0f8a5a4dd530549d37c43da52c923ac3b2af1a03 move-only(ish): don't expose CCoinsViewDBCursor (James O'Beirne)
    615c1adfb07b9b466173166dc2e53ace540e4b32 refactor: wrap CCoinsViewCursor in unique_ptr (James O'Beirne)
    
    Pull request description:
    
      I tripped over this one for a few hours at the beginning of the week, so I've sort of got a personal vendetta against `CCoinsView::Cursor()` returning a raw pointer.
    
      Specifically in the case of CCoinsViewDB, if a raw cursor is allocated and not freed, a cryptic leveldb assertion failure occurs on CCoinsViewDB destruction (`Assertion 'dummy_versions_.next_ == &dummy_versions_' failed.`).
    
      This is a pretty simple change.
    
      Related to: https://github.com/bitcoin/bitcoin/issues/21766
      See also: https://github.com/google/leveldb/issues/142#issuecomment-414418135
    
    ACKs for top commit:
      MarcoFalke:
        review ACK 7ad414f4bfa74595ee5726e66f3527045c02a977 🔎
      jonatack:
        re-ACK 7ad414f4bfa74595ee5726e66f3527045c02a977 modulo suggestion
      ryanofsky:
        Code review ACK 7ad414f4bfa74595ee5726e66f3527045c02a977. Two new commits look good and thanks for clarifying constructor comment
    
    Tree-SHA512: 6471d03e2de674d84b1ea0d31e25f433d52aa1aa4996f7b4aab1bd02b6bc340b15e64cc8ea07bbefefa3b5da35384ca5400cc230434e787c30931b8574c672f9
    7317e14a44
  66. Merge bitcoin/bitcoin#22270: test: Add bitcoin-util tests (+refactors)
    fa4017e7a0899959b2ac84bcbc3f34dfb17b5fce refactor: Pass grind args vector as const reference (MarcoFalke)
    fa08bc288f81dd42a482e2bfef37d21a1e5fddd2 Remove gArgs from AppInitUtil (MarcoFalke)
    fa751a47ff4253f58518d7f43d33ec1227ea0dbc Remove unused OptionsCategory arg from AddCommand (MarcoFalke)
    fa3c1eee7ff2646e78540d53b4f8eaf095a8c27d Remove unused includes from bitcoin-util (MarcoFalke)
    fa304929e2c3583bc3e6b05eaa6e0df6cdac6ec8 test: Add bitcoin-util tests (MarcoFalke)
    fa831e709a4d605a18e5de1627b48d670bb326fb build_msvc: Add bitcoin-util.exe (MarcoFalke)
    
    Pull request description:
    
      bitcoin-util has no tests
    
      See https://marcofalke.github.io/btc_cov/total.coverage/src/bitcoin-util.cpp.gcov.html (Coverage report showing 0%)
    
    ACKs for top commit:
      klementtan:
        Code review and tested ACK fa4017e7a0899959b2ac84bcbc3f34dfb17b5fce
      theStack:
        Tested ACK fa4017e7a0899959b2ac84bcbc3f34dfb17b5fce
      jamesob:
        reACK fa4017e7a0899959b2ac84bcbc3f34dfb17b5fce ([`jamesob/ackr/22270.1.MarcoFalke.test_add_bitcoin_util_te`](https://github.com/jamesob/bitcoin/tree/ackr/22270.1.MarcoFalke.test_add_bitcoin_util_te))
    
    Tree-SHA512: 68e2791239bc48d28fbb6394155c39ea0357a96ec7e4896ca579feeef1a803657165a0ef9fa3cf6e2a381e5b0ca0dafa1b594158303a04997db784201d8dd66d
    a196c89317
  67. bench: bench.h fixes and improvements 10f4ce2078
  68. bench: bench_bitcoin.cpp help fixups
    - remove unneeded strprintf
    - consistent punctuation (no EOL periods)
    - sort helps by order they are printed (alphabetical order)
    84e2d5b781
  69. doc: update doc/benchmarking.md d8513fe411
  70. Merge bitcoin/bitcoin#22306: [test] Improvements to p2p_addr_relay.py
    6168eb06b2044f00f18727b955b672fc91c60bd7 [test] Prevent intermittent issue (Amiti Uttarwar)
    1d8193e2a2950fd957654b601e85ab888899c394 [test] Remove GetAddrStore class (Amiti Uttarwar)
    ef2f149bf2d12e2d14e441fdf701808f0f1dfb8e [test] Update GetAddrStore callers to use AddrReceiver (Amiti Uttarwar)
    e8c67ea19ac4c0aec4a0b449ac3a4152f80dfff5 [test] Add functionality to AddrReceiver (Amiti Uttarwar)
    09dc073cff250afd47a3e219f35d1257add764e9 [test] Allow AddrReceiver to be used more generally (Amiti Uttarwar)
    
    Pull request description:
    
      A test refactor broken out from #21528 & a fix to #22243.
    
      This PR:
      1. consolidates the two helper classes into one, with the intent of making the test logic more clear & usable as we add more subtests to the file
    
      2. hopefully fixes the test flakiness by bumping up the mocktime interval to ensure `m_next_addr_send` timer triggers
    
    ACKs for top commit:
      mzumsande:
        Code-Review ACK 6168eb06b2044f00f18727b955b672fc91c60bd7
      lsilva01:
        Tested ACK https://github.com/bitcoin/bitcoin/pull/22306/commits/6168eb06b2044f00f18727b955b672fc91c60bd7 on Ubuntu 20.04
      brunoerg:
        tACK 6168eb06b2044f00f18727b955b672fc91c60bd7
    
    Tree-SHA512: 248324f9d37e0e5ffe4acc437cd72ad9a2960abc868a97c6040a36e6ea8b59029127ac4f63fcf67d981a5bb4dbf2334bb2c23c541fae8e910d5523884bcedcba
    bfa885898a
  71. Merge bitcoin/bitcoin#22320: build: set minimum required Boost to 1.64.0
    957f3584277d33b44b9f1618142f743e4083eb5d build: remove check for Boost Process header (fanquake)
    df2c93321765c7f77935fd92d31722d7b65a53db build: remove workaround for Boost and std::atomic (fanquake)
    2bf211696b8cd355856995ba821c74e67385b77d build: set minimum required Boost to 1.64.0 (fanquake)
    
    Pull request description:
    
      Setting a newer minimum required Boost means we can remove the awkward header / compile check for Boost Process.
    
      If we don't do this, we should at-least make Boost Process being missing no longer a failure, otherwise anyone building using Boost < 1.64.0 would have to pass `--disable-external-signer` as well.
    
      The only system I can see that is affected here, (doesn't have new enough system packages) is Debian Oldstable. However, anyone compiling there, can use depends. They can also no-longer use the system GCC (6.0), and I'd assume would be using Clang 7, which would be the newest compiler available to them. It's extended, LTS support also end in 1 year from now, so anyone still using it should be considering upgrading.
    
      Debian Buster (Stable) has 1.67+, Ubuntu Bionic has 1.65+, any of the BSDs, recent Fedora, macOS etc all also have well and truly new enough Boost versions available.
    
      I think this is something we should just do for 22.0. If not, definitely for 23.0.
    
      Fixes #22319. Compiling Bitcoin Core should work, as `windows.h` will be included.
      Alternative to #22294.
      Would also close #22269.
      #19128 could be re-opened.
    
    ACKs for top commit:
      laanwj:
        Tested ACK 957f3584277d33b44b9f1618142f743e4083eb5d that this fixes #22269.
      MarcoFalke:
        review ACK 957f3584277d33b44b9f1618142f743e4083eb5d
    
    Tree-SHA512: a8ffa7933dce8bf994892ef16664103d7b4e1008e52628e9becb918a7727232dfb51b23100a82dc2b60cd9af5877abc32dc2d3754a7e1b3ac5410a92fdf393f3
    c31161f4f7
  72. Merge bitcoin/bitcoin#22257: test: refactor: various (de)serialization helpers cleanups/improvements
    bdb8b9a347e68f80a2e8d44ce5590a2e8214b6bb test: doc: improve doc for `from_hex` helper (mention `to_hex` alternative) (Sebastian Falbesoner)
    191405420815d49ab50184513717a303fc2744d6 scripted-diff: test: rename `FromHex` to `from_hex` (Sebastian Falbesoner)
    a79396fe5f8f81c78cf84117a87074c6ff6c9d95 test: remove `ToHex` helper, use .serialize().hex() instead (Sebastian Falbesoner)
    2ce7b47958c4a10ba20dc86c011d71cda4b070a5 test: introduce `tx_from_hex` helper for tx deserialization (Sebastian Falbesoner)
    
    Pull request description:
    
      There are still many functional tests that perform conversions from a hex-string to a message object (deserialization) manually. This PR identifies all those instances and replaces them with a newly introduced helper `tx_from_hex`.
    
      Instances were found via
      * `git grep "deserialize.*BytesIO"`
    
      and some of them manually, when it were not one-liners.
    
      Further, the helper `ToHex` was removed and simply replaced by `.serialize().hex()`, since now both variants are in use (sometimes even within the same test) and using the helper doesn't really have an advantage in readability. (see discussion https://github.com/bitcoin/bitcoin/pull/22257#discussion_r652404782)
    
    ACKs for top commit:
      MarcoFalke:
        review re-ACK bdb8b9a347e68f80a2e8d44ce5590a2e8214b6bb 😁
    
    Tree-SHA512: e25d7dc85918de1d6755a5cea65471b07a743204c20ad1c2f71ff07ef48cc1b9ad3fe5f515c1efaba2b2e3d89384e7980380c5d81895f9826e2046808cd3266e
    d6a59166a1
  73. Merge bitcoin/bitcoin#22311: test: Add missing syncwithvalidationinterfacequeue in p2p_blockfilters
    fadddd13eef4428f5fa7237583d4be41a9335cd9 test: Add missing syncwithvalidationinterfacequeue (MarcoFalke)
    faa211fc6e3d4984b8edff1d762dd4cba205d982 test: Misc cleanup (MarcoFalke)
    fa1668bf5084a190b26b022b9e625a7be3defa6e test: Run pep-8 (MarcoFalke)
    facd97ae0f0d816107aa3bc9de321244200636a0 scripted-diff: Renames (MarcoFalke)
    
    Pull request description:
    
      The index on the block filters is running in the background on the validation interface. To avoid intermittent test failures, it needs to be synced.
    
      Also other cleanups.
    
    ACKs for top commit:
      lsilva01:
        Tested ACK https://github.com/bitcoin/bitcoin/pull/22311/commits/fadddd13eef4428f5fa7237583d4be41a9335cd9 on Ubuntu 20.04
    
    Tree-SHA512: d858405db426a2f9d5620059dd88bcead4e3fba3ccc6bd8023f624b768fbcfa2203246fb0b2db620490321730d990f0e78063b21a26988c969cb126d4bd697bd
    e59ea87954
  74. Merge bitcoin/bitcoin#22250: doc: add basic I2P documentation
    78cdab1ad2e85176784e4e1230622f42acd20149 doc: sort entries in doc/README.md#Miscellaneous alphabetically (Vasil Dimov)
    cad487bcfa829b7e20a0aafcb9a21eb55d5d1528 doc: add basic I2P documentation (Vasil Dimov)
    
    Pull request description:
    
      Add basic I2P documentation to help users to start using I2P and Bitcoin Core.
    
    ACKs for top commit:
      jonatack:
        ACK 78cdab1ad2e85176784e4e1230622f42acd20149
      laanwj:
        ACK 78cdab1ad2e85176784e4e1230622f42acd20149
    
    Tree-SHA512: 71cffc9419338a21cb9e811ee9463d6d09eef1a2a73190f766523bc1642a1f58984d5b2ab13da9b6560387ac9f431aace8bc7ae9b776585ecd3e3c1ff6af8e8d
    b7565c708d
  75. Merge bitcoin/bitcoin#22154: Add OutputType::BECH32M and related wallet support for fetching bech32m addresses
    754f134a50cc56cdf0baf996d909c992770fcc97 wallet: Add error message to GetReservedDestination (Andrew Chow)
    87a0e7a3b7c0ffd545e537bd497cdc3e67d045f6 Disallow bech32m addresses for legacy wallet things (Andrew Chow)
    6dbe4d10728f882986ed0d9ed77bc736f051c662 Use BECH32M for tr() desc, WitV1Taproot, and WitUnknown CTxDests (Andrew Chow)
    699dfcd8ad9487a4e04c1ffc68211e84e126b3d2 Opportunistically use bech32m change addresses if available (Andrew Chow)
    0262536c34567743e527dad46912c9ba493252cd Add OutputType::BECH32M (Andrew Chow)
    177c15d2f7cd5406ddbce8217fc023057539b828 Limit LegacyScriptPubKeyMan address types (Andrew Chow)
    
    Pull request description:
    
      Currently bech32m addresses are classfied as bech32. Because bech32m is incompatible with bech32, we need to define a new `OutputType` for it so that it can be handled correctly. This PR adds `OutputType::BECH32M`, updates all of the relevant `OutputType` classifications, and handle requests for bech32m addresses. There is now a `bech32m` address type string that can be used.
    
      * `tr()` descriptors now report their output type as `OutputType::BECH32M`. `WtinessV1Taproot` and `WitnessUnknown` are also classified as `OutputType::BECH32M`.
      * Bech32m addresses are completely disabled for legacy wallets. They cannot be imported (explicitly disallowed in `importaddress` and `importmulti`), will not be created when getting all destinations for a pubkey, and will not be added with `addmultisigaddress`. Additional protections have been added to `LegacyScriptPubKeyMan` to disallow attempting to retrieve bech32m addresses.
      * Since Taproot multisigs are not implemented yet, `createmultisig` will also disallow the bech32m address type.
      * As Taproot is not yet active, `DescriptorScriptPubKeyMan` cannot and will not create a `tr()` descriptor. Protections have been added to make sure this cannot occur.
      * The change address type detection algorithm has been updated to return `bech32m` when there is a segwit v1+ output script and the wallet has a bech32m `ScriptPubKeyMan`, falling back to bech32 if one is not available.
    
    ACKs for top commit:
      laanwj:
        re-review ACK 754f134a50cc56cdf0baf996d909c992770fcc97
      Sjors:
        re-utACK 754f134: only change is switching to `bech32m` in two `wallet_taproot.py` test cases.
      fjahr:
        re-ACK 754f134a50cc56cdf0baf996d909c992770fcc97
      jonatack:
        ACK 754f134a50cc56cdf0baf996d909c992770fcc97
    
    Tree-SHA512: 6ea90867d3631d0d438e2b08ce6ed930f37d01323224661e8e38f183ea5ee2ab65b5891394a3612c7382a1aff907b457616c6725665a10c320174017b998ca9f
    0553d75268
  76. doc: recommend `--disable-external-signer` in OpenBSD build guide e65d1d4986
  77. fuzz: Check banman roundtrip fa485d06ec
  78. Merge bitcoin/bitcoin#22327: cli: Avoid truncating -rpcwaittimeout
    fa34cb80248cc39a73fc393f65c3cfc62e849556 cli: Avoid truncating -rpcwaittimeout (MarcoFalke)
    
    Pull request description:
    
      `seconds` is not enough precision to "exactly" store a timestamp n seconds into the future. Improve the precision by using `microseconds`. Fixes #22325
    
      Also, use chrono literals.
    
    ACKs for top commit:
      jonatack:
        ACK fa34cb80248cc39a73fc393f65c3cfc62e849556 review, debug-built, tested
      theStack:
        Tested ACK fa34cb80248cc39a73fc393f65c3cfc62e849556
    
    Tree-SHA512: 7158da8545f9998a82bcc8636e04564efdb1e1be43b4288298c151b4df29ad47a2760259eefadd4a01db92ea18a1e017f3febc1cd8c69a4b28c86180229d8c90
    b2f5c38333
  79. Revert "Cache parent xpub inside of BIP32PubkeyProvider"
    This reverts commit 09e25071f40c564af08a1386c39c4f2d8eb484b6.
    
    The changes made in this commit have turned out to be unnecessary and
    confusing, so it is being reverted.
    976b53b085
  80. Refactor Cache merging and writing
    Instead of having a large blob of cache merging code in TopUp, refactor
    this into DescriptorCache so that it can merge and provide a diff
    (another DescriptorCache containing just the items that were added).
    Then TopUp can just write everything that was in the diff.
    0b4c8ef75c
  81. Move DescriptorCache writing to WalletBatch
    Instead of adhoc writing of the items in DescriptorCache, move it all
    into WalletBatch.
    cacc391098
  82. descriptors: Cache last hardened xpub
    Cache the last hardenex xpub in the DescriptorCache
    d87b544b83
  83. wallet: Store last hardened xpub cache 432ba9e543
  84. wallet: Upgrade existing descriptor caches
    Add functions to upgrade existing descriptor caches to support the use
    of last hardened xpub caching.
    74fede3b8b
  85. Remove priv option for ToNormalizedString 75530c93a8
  86. Change DescriptorImpl::ToStringHelper to use an enum
    Instead of having multiple, possibly conflicting, bools controlling the
    flow of ToStringHelper, use an enum.
    7a26ff10c2
  87. Pass in DescriptorCache to ToNormalizedString
    Use the descriptor xpub cache in ToNormalizedString so that the wallet
    does not need to be unlocked in order to get the normalized descriptor.
    3280704886
  88. wallet, rpc: listdescriptors does not need unlocked
    With the last hardened xpub cache, we don't neeed to have the wallet be
    unlocked for listdescriptors.
    e6cf0ed92d
  89. Mark print-% target as phony.
    .PHONY does not take patterns (such as print-%) as prerequisites.
    Have print-% depend on FORCE and mark FORCE as phony.
    
    $ # on master
    $ make print-host
    host=x86_64-pc-linux-gnu
    $ touch print-host
    $ make print-host
    make: 'print-host' is up to date.
    $
    $ git co mark_print_as_phony
    Switched to branch 'mark_print_as_phony'
    $ make print-host
    host=x86_64-pc-linux-gnu
    $ touch FORCE
    $ make print-host
    host=x86_64-pc-linux-gnu
    fb7be92b09
  90. Merge bitcoin/bitcoin#22322: fuzz: Check banman roundtrip
    fa485d06ec10acd9a791f8d29689e1e82591fb70 fuzz: Check banman roundtrip (MarcoFalke)
    
    Pull request description:
    
    ACKs for top commit:
      practicalswift:
        cr ACK fa485d06ec10acd9a791f8d29689e1e82591fb70
      vasild:
        ACK fa485d06ec10acd9a791f8d29689e1e82591fb70
    
    Tree-SHA512: 84e297c0b90ef68d72afd2053bfda2888496c1b180233516a8caaf76d6c03403f1e4ed59f1eb32d799873fc34009634b4ce372244b9d546d04626af41ac4d1d7
    246daf1f53
  91. Merge bitcoin/bitcoin#19362: rpc/blockchain: Reset scantxoutset progress before inferring descriptors
    8c4129b4540f4f739413ed9a6fbfc78afc252f42 rpc: reset scantxoutset progress on finish (Pavol Rusnak)
    
    Pull request description:
    
      Fixes https://github.com/bitcoin/bitcoin/issues/19361 by moving resetting the `g_scan_progress` variable **before** inferring the descriptors
    
    ACKs for top commit:
      achow101:
        Code review ACK 8c4129b4540f4f739413ed9a6fbfc78afc252f42
    
    Tree-SHA512: 2b81e5c930b9c201a1b9cc742c37e0617582326acd9adbd6b14991d33c05d51b1d5ff6a26f3accab7d274dc8c6a48bc8cbccf0811b60c1f76dd805f9b31482c0
    3e306ee1d5
  92. Avoid the use of P0083R3 std::set::merge 6cf4ea7187
  93. Merge bitcoin/bitcoin#22342: Avoid the use of P0083R3 std::set::merge
    6cf4ea71878c0a83f2e49831e4dfa119c53761b7 Avoid the use of P0083R3 std::set::merge (Pieter Wuille)
    
    Pull request description:
    
      This use was introduced in #21365, but as pointed out in #22339, this causes compatibility problems.
    
      Just avoid its use for now.
    
    ACKs for top commit:
      jonatack:
        re-ACK 6cf4ea71878c0a83f2e49831e4dfa119c53761b7
      benthecarman:
        ACK 6cf4ea71878c0a83f2e49831e4dfa119c53761b7
      hebasto:
        ACK 6cf4ea71878c0a83f2e49831e4dfa119c53761b7, successfully compiled on the following systems:
    
    Tree-SHA512: 2b3fdcadb7de98963ebb0b192bd956aa68526457fe5b374c74a69ea10d5b68902763148f11abbcc471010bcdc799e0804faef5f8e8ff8a509b3a053c0cb0ba39
    9c3751a0c9
  94. doc: doc/README.md IRC updates
    - update remaining link and reference from freenode to libera
    - remove no-longer-existing #bitcoin-dev IRC channel
    - other minor fixups
    dd49f1b52e
  95. doc: Document minimum required libc++ version 18c2027c76
  96. Merge bitcoin/bitcoin#22339: doc: Document minimum required libc++ version
    18c2027c76b54f1a68a0daf98bb06d988b19447d doc: Document minimum required libc++ version (Hennadii Stepanov)
    
    Pull request description:
    
      The minimum required libc++ version to compile the current master is 7.0.
    
      See #22324.
    
    ACKs for top commit:
      fanquake:
        ACK 18c2027c76b54f1a68a0daf98bb06d988b19447d
    
    Tree-SHA512: a2811236a600caea5b9fd156993a0195fc3f1c231b48d0e369250ebb759f7153fd974390de388b91b367d9dc5e115922a2cab9d3b8ad872a2724c07b63b9fcf4
    ac238f76bf
  97. Merge bitcoin/bitcoin#22349: doc: repository IRC updates
    dd49f1b52e5602bf3f5ffd54733cba99f0dfa22a doc: doc/README.md IRC updates (Jon Atack)
    
    Pull request description:
    
      Follow-up to https://github.com/bitcoin/bitcoin/pull/22109:
    
      - update remaining link and reference from Freenode to Libera
      - remove defunct #bitcoin-dev channel
      - other minor fixups
    
    ACKs for top commit:
      fanquake:
        ACK dd49f1b52e5602bf3f5ffd54733cba99f0dfa22a
    
    Tree-SHA512: de20a8f3889028def7139be1cd0fa15daa3351ca987a16090d0caa6b4cd397e370400e2b3033ec776e270aa3a1ab085ada20fbdcc063ac88e2ad3b8351a596e7
    8cdf91735f
  98. ci: Upgrading pip version in macos environment
    During each CI run, for macos native environment, python packages lief
    and zmq are rebuilt everytime which wastes a lot of resources and time.
    The latest version of pip directly fetches pre-built binaries. Through
    this commit pip version is upgraded in macos environment before
    installation of these packages.
    057750c09d
  99. Remove unused wallet pointer from NotifyTransactionChanged signal faf3640303
  100. Remove unused wallet pointer from NotifyAddressBookChanged 8888cf45f5
  101. qt: Do not extend recent transaction width to address/label string 9ea1da6fc9
  102. qt: Draw "eye" sign at the beginning of watch-only addresses cd46c11577
  103. doc: Remove unused section from release process fa051d3e5e
  104. refactor: Make httpserver work queue a unique_ptr fa92e60f38
  105. Merge bitcoin/bitcoin#22146: Reject invalid coin height and output index when loading assumeutxo
    fa9ebedec3f982bb5bb459ea33d74c94d9b5cec4 Reject invalid coin height and output index when loading assumeutxo (MarcoFalke)
    
    Pull request description:
    
      It should be impossible to have a coin at a height higher than the height of the snapshot block, so reject those early to avoid integer wraparounds and hash collisions later on.
    
      Same for the outpoint index.
    
      Both issues were found by fuzzing:
    
      * The height issue by OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=34793
      * The outpoint issue by my fuzz server: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=34793#c2
    
    ACKs for top commit:
      practicalswift:
        cr ACK fa9ebedec3f982bb5bb459ea33d74c94d9b5cec4: patch looks correct
      jamesob:
        crACK https://github.com/bitcoin/bitcoin/pull/22146/commits/fa9ebedec3f982bb5bb459ea33d74c94d9b5cec4
      theStack:
        Code review ACK fa9ebedec3f982bb5bb459ea33d74c94d9b5cec4
      benthecarman:
        crACK fa9ebedec3f982bb5bb459ea33d74c94d9b5cec4
    
    Tree-SHA512: dae7caee4b3862b23ebdf2acb7edec4baf75b0dbf1409b370b1a73aa6b632b317ebfac596dcbaf4edfb1301b513f45465ea75328962460f35e2af0d7e547c9ac
    3f56ef7bef
  106. qt: Emit dataChanged signal to dynamically re-sort Peers table 986bf78d7e
  107. test: wallet util: fix multisig P2SH-P2WSH script creation 61b6a017a9
  108. test: use script_util helpers for creating P2PKH scripts b57b633b94
  109. wallet: allow to import same descriptor twice bf68ebc1cd
  110. wallet: don't mute exceptions in importdescriptors f1b7db1474
  111. wallet: maintain SPK consistency on internal flag change 586f1d53d6
  112. test: wallet importdescriptors update existing 6737d9655b
  113. wallet: deactivate descriptor 3efaf83c75
  114. Merge bitcoin/bitcoin#21789: refactor: Remove ::Params() global from CChainState
    fa0d9211ef87a682573aaae932c0c440acbcb8a8 refactor: Remove chainparams arg from CChainState member functions (MarcoFalke)
    fa389471251f043ec25e7b01e59b37d3b921ce54 refactor: Remove ::Params() global from inside CChainState member functions (MarcoFalke)
    
    Pull request description:
    
      The `::Params()` global is verbose and confusing. Also it makes tests a bit harder to write because they'd have to mock a global.
    
      Fix all issues by simply using a member variable that points to the right params.
    
      (Can be reviewed with `--word-diff-regex=.`)
    
    ACKs for top commit:
      jnewbery:
        ACK fa0d9211ef87a682573aaae932c0c440acbcb8a8
      kiminuo:
        utACK fa0d9211
      theStack:
        ACK fa0d9211ef87a682573aaae932c0c440acbcb8a8 🍉
    
    Tree-SHA512: 44676b19c9ed471ccb536331d3029bad192d7d50f394fd7b8527ec431452aeec8c4494164b9cf8e16e0123c4463b16be864366c6b599370032c17262625a0356
    8071ec179d
  115. Merge bitcoin/bitcoin#22358: Remove unused wallet pointer from wallet signals
    8888cf45f5e45b38cb830f9c94cafbf622e1fe5f Remove unused wallet pointer from NotifyAddressBookChanged (MarcoFalke)
    faf36403038afb3df3ddd963bd6c352d3eff4da8 Remove unused wallet pointer from NotifyTransactionChanged signal (MarcoFalke)
    
    Pull request description:
    
      The signals are members of the wallet, so passing the pointer would be redundant even if it was used.
    
      Also, fix `with` -> `without`, which was forgotten in commit ca4cf5cff6f.
    
    ACKs for top commit:
      jonatack:
        Code review ACK 8888cf45f5e45b38cb830f9c94cafbf622e1fe5f also verified with/without lock cs_wallet status for each of the two functions and debian clang 11 debug build clean
      promag:
        Code review ACK 8888cf45f5e45b38cb830f9c94cafbf622e1fe5f.
      theStack:
        Code review ACK 8888cf45f5e45b38cb830f9c94cafbf622e1fe5f
    
    Tree-SHA512: e3b80931ce9bcb05213619f5435ac7c21d3c7848643950a70db610902bd1803c92bb75e501d46b0e519bc576901f160e088e8882c4f1adce892a80df565f897b
    e0face9235
  116. wallet: do not spam about non-existent spk managers 6084d2caed
  117. Merge bitcoin/bitcoin#22361: refactor: Make httpserver work queue a unique_ptr
    fa92e60f38cb109fe5a3c7acfe1017ffebc388cc refactor: Make httpserver work queue a unique_ptr (MarcoFalke)
    
    Pull request description:
    
      This simplifies the code a bit because `if (p) { delete p; p = nullptr; }` can be replaced by a call to the `reset()` member.
    
    ACKs for top commit:
      promag:
        Core review ACK fa92e60f38cb109fe5a3c7acfe1017ffebc388cc.
      jonatack:
        ACK fa92e60f38cb109fe5a3c7acfe1017ffebc388cc code review, debug build clean, ran test/functional/interface*.py tests locally as a sanity check
      hebasto:
        ACK fa92e60f38cb109fe5a3c7acfe1017ffebc388cc, I have reviewed the code and it looks OK, I agree it can be merged.
    
    Tree-SHA512: 6b122162317dd4ad6889341745c7ac1903a3ee510f6548f46dc356308442a6eff13eb8dc604c38ba18783e7a66d2b836d641a8594ff980a010c12c97f3856684
    a000cb013c
  118. versionbits: correct doxygen comments 36a4ba0aaa
  119. versionbits: Use dedicated lock instead of cs_main eccd736f3d
  120. [refactor] Add deploymentstatus.h
    Provides DeploymentEnabled, DeploymentActiveAt, and DeploymentActiveAfter
    helpers for checking the status of buried deployments. Can be overloaded
    so the same syntax works for non-buried deployments, allowing future
    soft forks to be changed from signalled to buried deployments without
    having to touch the implementation code.
    
    Replaces IsWitnessEnabled and IsScriptWitnessEnabled.
    2b0d291da8
  121. [refactor] Add versionbits deployments to deploymentstatus.h
    Adds support for versionbits deployments to DeploymentEnabled,
    DeploymentActiveAfter and DeploymentActiveAt. Also moves versionbitscache
    from validation to deploymentstatus.
    de55304f6e
  122. scripted-diff: rename versionbitscache
    -BEGIN VERIFY SCRIPT-
    sed -i -e 's/versionbitscache/g_versionbitscache/g' $(git grep -l versionbitscache)
    -END VERIFY SCRIPT-
    c64b2c6a0f
  123. [move-only] Rename versionbitsinfo to deploymentinfo ea68b3a572
  124. deploymentinfo: Add DeploymentName() 92f48f360d
  125. [refactor] rpc/blockchain.cpp: SoftForkPushBack
    Rename BIP9SoftForkPushBack and BuriedSoftForkPushBack to SoftForkPushBack
    and have the compiler figure out which one to use based on the deployment
    type. Avoids the need to update the file when burying a deployment.
    8ee3e0bed5
  126. [refactor] versionbits: make VersionBitsCache a full class
    Moves the VersionBits* functions to be methods of the cache class,
    and makes the cache and its lock private to the class.
    0cfd6c6a8f
  127. [move-only] Move ComputeBlockVersion from validation to versionbits 4a69b4dbe0
  128. [refactor] Move ComputeBlockVersion into VersionBitsCache
    This also changes ComputeBlockVersion to take the versionbits cache
    mutex once, rather than once for each versionbits deployment.
    c5f36725e8
  129. tests: remove ComputeBlockVersion shortcut from versionbits tests e48826ad87
  130. Merge bitcoin/bitcoin#18568: doc: Clarify developer notes about constant naming
    05f9770c1fa64bd9730cd6e18ec333e0801c00d6 doc: Clarify developer notes about constant naming (Russell Yanofsky)
    
    Pull request description:
    
      I'm pretty sure developer notes were intended to say constants should be upper case and variables should be lower case, but right now they are ambiguous about whether to write:
    
      ```c++
      extern const int SYMBOL;
      ```
    
      or:
    
      ```c++
      extern const int g_symbol;
      ```
    
      First convention above is better than the second convention because it tells you without having to look anything up that the value of `SYMBOL` won't change at runtime. Also I haven't seen other c++ projects using the second convention.
    
    ACKs for top commit:
      MarcoFalke:
        cr ACK 05f9770c1fa64bd9730cd6e18ec333e0801c00d6
      practicalswift:
        ACK 05f9770c1fa64bd9730cd6e18ec333e0801c00d6
      jarolrod:
        ACK 05f9770c1fa64bd9730cd6e18ec333e0801c00d6 🥃
    
    Tree-SHA512: 766d0e25d9db818d45df4ad6386987014f2053584cbced4b755ceef8bda6b7e2cfeb34eb8516423bd03b140faaf577614d5e3be2799f7eed0eb439187ab85323
    bfd910cae4
  131. refactor: remove m_internal from DescriptorSPKman
    Descriptor in itself is neither internal or external.
    It's responsibility of a wallet to assign and manage descriptors
    for a specific purpose. Duplicating such information could lead to
    inconsistencies and unexpected behaviour.
    181181019c
  132. Merge bitcoin/bitcoin#18096: doc: IsFinalTx comment about nSequence & OP_CLTV
    f9e37f33ce2d8b463a0bcbe7189c9bc5b36530b7 doc: IsFinalTx comment about nSequence & OP_CLTV (Yuval Kogman)
    
    Pull request description:
    
      It's somewhat surprising that a transaction's `nLockTime` field is ignored
      when all `nSequence` fields are final, so this change aims to clarify this
      behavior and cross reference relevant details of `OP_CHECKLOCKTIMEVERIFY`.
    
    ACKs for top commit:
      MarcoFalke:
        ACK f9e37f33ce2d8b463a0bcbe7189c9bc5b36530b7
    
    Tree-SHA512: 88460dacbe4b8115fb1948715f09b21d4f34ba1da9e88d52f0b774a969f845e9eddc5940e7fee66eacdd3062dc40d6d44c3f282b0e5144411fd47eb2320b44f5
    e1a13f12e1
  133. Merge bitcoin/bitcoin#22353: ci: Upgrading pip version in macos environment
    057750c09d0a8331c33966d2cc2285ef82f08af8 ci: Upgrading pip version in macos environment (Tushar Singla)
    
    Pull request description:
    
      During each CI run, in macos native environment, python packages lief and zmq are rebuilt everytime which wastes a lot of resources and time and fixes #22206. The latest version of pip directly fetches pre-built binaries. Through this commit pip version is upgraded in macos environment before installation of these packages.
    
    ACKs for top commit:
      MarcoFalke:
        cr ACK 057750c09d0a8331c33966d2cc2285ef82f08af8
    
    Tree-SHA512: e61d02e46c8fe6a89119014d025a26aba090f9507d725315680893290f5bbc20a375ef408c71fa8db2f485b44ec91cfa0c140198ca44a9d3e0a57055b6bb9582
    3fc20abab0
  134. Do not clone qa-assets git repository if not necessary 30450a1bd5
  135. qt: allow prompt icon to be colorized 2f23ad2c40
  136. Merge bitcoin/bitcoin#21329: descriptor wallet: Cache last hardened xpub and use in normalized descriptors
    e6cf0ed92de31a5ac35a271b0da8f0a8364d1175 wallet, rpc: listdescriptors does not need unlocked (Andrew Chow)
    3280704886b60644d103a5eb310691c003a39328 Pass in DescriptorCache to ToNormalizedString (Andrew Chow)
    7a26ff10c2f2e139fbc63e2f37fb33ea4efae088 Change DescriptorImpl::ToStringHelper to use an enum (Andrew Chow)
    75530c93a83f3e94bcb78b6aa463c5570c1e737e Remove priv option for ToNormalizedString (Andrew Chow)
    74fede3b8ba69e2cc82c617cdf406ab79df58825 wallet: Upgrade existing descriptor caches (Andrew Chow)
    432ba9e5434da90d2cf680f23e8c7b7164c9f945 wallet: Store last hardened xpub cache (Andrew Chow)
    d87b544b834077f102724415e0fada6ee8b2def2 descriptors: Cache last hardened xpub (Andrew Chow)
    cacc3910989c4f3d7afa530dbab042461426abce Move DescriptorCache writing to WalletBatch (Andrew Chow)
    0b4c8ef75cd03c8f0a8cfadb47e0fbcabe3c5e59 Refactor Cache merging and writing (Andrew Chow)
    976b53b085d681645fd3a008fe382de85647e29f Revert "Cache parent xpub inside of BIP32PubkeyProvider" (Andrew Chow)
    
    Pull request description:
    
      Currently fetching a normalized descriptor requires the wallet to be unlocked as it needs the private keys to derive the last hardened xpub. This is not very user friendly as normalized descriptors shouldn't require and don't involve the private keys except for derivation. We solve this problem by caching the last hardened xpub (which has to be derived at some point when generating the address pool).
    
      However the last hardened xpub was not already being cached. We only cached the immediate parent xpub and derived child keys. For example, with a descriptor derivation path of `/84'/0'/0'/0/*`, the parent xpub that is cached is `m/84'/0'/0'/0`, and the child keys of `m/84'/0'/0'/0/i` (note that child keys would not be cached in this case). This parent xpub is not suitable for the normalized descriptor form as we want the key at `m/84'/0'/0'`. So this PR adds another field to `DescriptorCache` to cache the last hardened xpub so that we can use them for normalized descriptors.
    
      Since `DescriptorCache` is changing, existing descriptor wallets need to be upgraded to use this new cache. The upgrade will occur in the background either at loading time (if the wallet is not encrypted) or at unlocking time in the same manner that `UpgradeKeyMetadata` operates. It will use a new wallet flag `WALLET_FLAG_LAST_HARDENED_XPUB_CACHED` to indicate whether the descriptor wallet has the last hardened xpub cache.
    
      Lastly `listdescriptors` will not require the wallet to be locked and `getaddressinfo`'s `parent_desc` will always be output (assuming the upgrade has occurred).
    
    ACKs for top commit:
      fjahr:
        tACK e6cf0ed92de31a5ac35a271b0da8f0a8364d1175
      S3RK:
        reACK e6cf0ed
      jonatack:
        Semi ACK e6cf0ed92de31a5ac35a271b0da8f0a8364d1175 reviewed, debug-built and ran unit tests and some of the descriptor functional tests at each commit. I'm not very familiar with this code and it could be clearer to the uninitiated IMHO, so I'm not confident enough to give a full ACK. Various minor suggestions follow, most of them for readability, feel free to pick and choose.
      meshcollider:
        Code review + functional test run ACK e6cf0ed92de31a5ac35a271b0da8f0a8364d1175
    
    Tree-SHA512: ac27aade8644525cd65bfcaf27ff32afb974085b1451faf4ff68c6671a690bd6a41d4f39a33cbf461ae0fbe85995c0a4c08dbd36171da1c1d2a1d00053ad298d
    722776c0fd
  137. test: Add test for replacement relay fee check c4ddee64c7
  138. Merge bitcoin/bitcoin#19651: wallet: importdescriptors update existing
    3efaf83c75cd8dc2fa084537b8ed6715fb58c04d wallet: deactivate descriptor (S3RK)
    6737d9655bcf527afbd85d610d805a2d0fd28c4f test: wallet importdescriptors update existing (S3RK)
    586f1d53d60880ea2873d860f95e3390016620d1 wallet: maintain SPK consistency on internal flag change (S3RK)
    f1b7db14748d9ee04735b4968366d33bc89aea23 wallet: don't mute exceptions in importdescriptors (S3RK)
    bf68ebc1cd555f791103f81adc9111e0e55c8003 wallet: allow to import same descriptor twice (S3RK)
    
    Pull request description:
    
      Rationale: allow updating existing descriptors with `importdescriptors` command.
    
      Currently if you run same `importdescriptors` command twice with a descriptor containing private key you will get very confusing error — `Missing required fields`. What happens is that Wallet tries to write imported private key to the disk, but it exists already so we get `DB_KEYEXIST (-30995)` from BerkelyDB. Please note, that we set `DB_NOOVERWRITE` (I guess not to lose some keys accidentally). The exception is caught in `catch (...)` in rpcdump.cpp with a generic error.
    
      With this PR if a descriptor is already present than we will update its activeness, internalness, label, range and next_index.
      For the range only expansion is allowed (range start can only decrease, range end increase).
    
    ACKs for top commit:
      achow101:
        re-ACK 3efaf83c75cd8dc2fa084537b8ed6715fb58c04d
      meshcollider:
        Code review ACK 3efaf83c75cd8dc2fa084537b8ed6715fb58c04d
      jonatack:
        Light ACK 3efaf83c75cd8dc2fa084537b8ed6715fb58c04d per `git range-diff a000cb0 5d96704 3efaf83` and as a sanity check, re-debug-built on debian with gcc 10.2.1 and clang 11, ran wallet_importdescriptors.py
    
    Tree-SHA512: 122c4b621d64ec8a3b625f3aed9f01a2b5cbaf2029ad0325b5ff38d67fff5cd35324335fabe2dd5169548b01b267c81be6ae0f5c834342f3d5f6eeed515c4843
    045bb06ebd
  139. Merge bitcoin/bitcoin#20191: wallet, refactor: make DescriptorScriptPubKeyMan agnostic of internal flag
    181181019c5baa3e2d5b675d1843a45aa028781c refactor: remove m_internal from DescriptorSPKman (S3RK)
    
    Pull request description:
    
      Rationale: improve consistency between `CWallet` and `DescriptorScriptPubKeyMan`; simplify `ScriptPubKeyMan` interface.
    
      Descriptor in itself is neither internal or external. It's responsibility of a wallet to assign and manage descriptors for a specific purpose. Duplicating information about internalness of a descriptor could lead to inconsistencies and unexpected behaviour (for example misreporting keypool size).
    
    ACKs for top commit:
      instagibbs:
        reACK https://github.com/bitcoin/bitcoin/pull/20191/commits/181181019c5baa3e2d5b675d1843a45aa028781c
      achow101:
        reACK 181181019c5baa3e2d5b675d1843a45aa028781c
    
    Tree-SHA512: d5613b7f6795b290bfa0fd8cb0536de1714d0cf72cba402266bd06d550758ebad690b54fc0a336a1c7414b5814aa4a37c90a6ae89926474a97d30956d7e034ff
    5a95c5179c
  140. wallet: erase spkmans rather than setting to nullptr
    In many places in ScriptPubKeyMan managing code, we assume that the
    ScriptPubKeyMan being retrieved actually exists and is not a nullptr.
    Thus removing a ScriptPubKeyMan requires erasing the object from the
    map rather than setting it to a nullptr.
    b945a31afa
  141. Merge bitcoin-core/gui#366: Dark Mode fixes/portability
    9d5bf6bf01af40a9684f1b1f06a8df4aaf36b8f3 GUI: Always call parent changeEvent handler (Luke Dashjr)
    c901d4d8ce7949276da57eacb82b1a3ce40cac27 GUI: Enable palette change adaptation on all platforms (Luke Dashjr)
    
    Pull request description:
    
      The changes to support macOS "Dark Mode" are valid for any platform, and should work so long as Qt implements the PaletteChange event. (Worst case, we're no worse off with trying.)
    
      Additionally, we shouldn't block the parent classes from implementing event handlers. Who knows what side effects that could have.
    
    ACKs for top commit:
      hebasto:
        ACK 9d5bf6bf01af40a9684f1b1f06a8df4aaf36b8f3, tested on Linux Mint 20.1 (Qt 5.12.8) with the [`qt5ct`](https://packages.ubuntu.com/focal/qt5ct) package installed.
      kristapsk:
        ACK 9d5bf6bf01af40a9684f1b1f06a8df4aaf36b8f3. Tested on Gentoo Linux with Xfce4 and Qt 5.15.2, does not break anything on my computer.
    
    Tree-SHA512: dce2fff0ff129eda208132390a37424ff9607539287dbdbfdfd659ed9c4ea0472541e987489a04fd935e391dc006a35bfc9cfa9bcff33602b7dbd29b81c51626
    34f554dbd3
  142. Merge bitcoin-core/gui#330: Allow prompt icon to be colorized
    2f23ad2c4031c43c6820ead6af7ae7cc6d4275ad qt: allow prompt icon to be colorized (Jarol Rodriguez)
    
    Pull request description:
    
      Opening the console on macOS, while in dark mode, the console prompt icon will not be colorized white like other icons. This applies the `platformStyle` to the icon so that It can be colorized white.
    
      While here, refactor the `promptIcon` widget from a `QPushButton` to `QLabel`; which is more appropriate, per [Qt Docs](https://doc.qt.io/qt-5/qlabel.html#details):
      > QLabel is used for displaying text or an image. No user interaction functionality is provided.
    
      | Master        | PR               |
      | ----------- | ----------- |
      | ![Screen Shot 2021-05-14 at 11 46 33 PM](https://user-images.githubusercontent.com/23396902/118347462-8f689780-b511-11eb-8335-329f7d2a9992.png) | ![Screen Shot 2021-05-14 at 11 45 41 PM](https://user-images.githubusercontent.com/23396902/118347463-92638800-b511-11eb-9044-073f51ef27ff.png) |
    
    ACKs for top commit:
      hebasto:
        ACK 2f23ad2c4031c43c6820ead6af7ae7cc6d4275ad
    
    Tree-SHA512: 21f8b1610e4820c9064bbd08608b5467e5b9499e2a3b149ff223e37b60e7d560497255c733eafa5434628a84b9f7b7c91d8b0f34b02be2f9ceb3ab21a4d555a8
    333ec8be82
  143. Merge bitcoin/bitcoin#22376: ci: Do not clone `bitcoin-core/qa-assets` git repository if not necessary
    30450a1bd5d278e285f50a7e4cfc755545960e92 Do not clone qa-assets git repository if not necessary (Kiminuo)
    
    Pull request description:
    
      This PR attempts to remove an unnecessary step when CI runs.
    
      The main motivation for the change is that I locally use `MAKEJOBS="-j15" FILE_ENV="./ci/test/00_setup_env_android.sh" ./ci/test_run_all.sh` to find out if a patch of mine works or not. Cloning `bitcoin-core/qa-assets` is slow on my machine (which is by no means slow).
    
    ACKs for top commit:
      MarcoFalke:
        cr ACK 30450a1bd5d278e285f50a7e4cfc755545960e92
    
    Tree-SHA512: 5763b53da9554b06039c39f8fc729de1b106cce2a242de8f97528d001bfa01d4f48d2a128f458a3cdee3da36312354c6714839b947f313c089c2c5cb30233a39
    3ef2d400fa
  144. build: Fix Boost Process compatibility with mingw-w64 compiler
    Boost 1.71 has a broken compatibility with mingw-w64 compiler due to the
    added __kernel_entry SAL annotations.
    67669ab425
  145. Merge bitcoin/bitcoin#22379: wallet: erase spkmans rather than setting to nullptr
    b945a31afac63010fce782b8fbca96dee6b458c5 wallet: erase spkmans rather than setting to nullptr (Andrew Chow)
    
    Pull request description:
    
      In many places in ScriptPubKeyMan managing code, we assume that the ScriptPubKeyMan being retrieved actually exists and is not a nullptr. Thus removing a ScriptPubKeyMan requires erasing the object from the map rather than setting it to a nullptr.
    
      This fixes a segmentation fault that can be reached with `test/functional/wallet_descriptors.py --descriptors`
    
    ACKs for top commit:
      S3RK:
        ACK b945a31
    
    Tree-SHA512: 344a4cf9b1c168428750c751dcd24c52032506f20c81977fe93c4b5307ea209de72bb62a9c5284820f225b03acdc9573fceb734833d29b82f49d5a799ddcaea7
    fa46e48982
  146. Merge bitcoin/bitcoin#22334: wallet: do not spam about non-existent spk managers
    6084d2caed9b2c70c0f19898c33ecb141fe603c8 wallet: do not spam about non-existent spk managers (S3RK)
    
    Pull request description:
    
      Avoid spam in logs during `loadwallet`, `listdescriptors` and probably other commands as well.
    
      **`loadwallet` Before:**
      ```
      2021-06-24T06:31:45Z init message: Loading wallet…
      2021-06-24T06:31:45Z [desc] Wallet File Version = 169900
      2021-06-24T06:31:45Z [desc] Keys: 0 plaintext, 0 encrypted, 0 w/ metadata, 0 total. Unknown wallet records: 0
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 2 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 2 does not exist
      2021-06-24T06:31:45Z [desc] Wallet completed loading in             197ms
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 2 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 2 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 2 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 2 does not exist
      2021-06-24T06:31:45Z [desc] setKeyPool.size() = 0
      2021-06-24T06:31:45Z [desc] mapWallet.size() = 0
      2021-06-24T06:31:45Z [desc] m_address_book.size() = 0
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] External scriptPubKey Manager for output type 2 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 0 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 1 does not exist
      2021-06-24T06:31:45Z [desc] Internal scriptPubKey Manager for output type 2 does not exist
      {
        "name": "desc",
        "warning": ""
      }
      ```
    
      **After:**
      ```
      2021-06-24T06:26:58Z init message: Loading wallet…
      2021-06-24T06:26:58Z [desc] Wallet File Version = 169900
      2021-06-24T06:26:58Z [desc] Keys: 0 plaintext, 0 encrypted, 0 w/ metadata, 0 total. Unknown wallet records: 0
      2021-06-24T06:26:58Z [desc] Wallet completed loading in             158ms
      2021-06-24T06:26:58Z [desc] setKeyPool.size() = 0
      2021-06-24T06:26:58Z [desc] mapWallet.size() = 0
      2021-06-24T06:26:58Z [desc] m_address_book.size() = 0
      {
        "name": "desc",
        "warning": ""
      }
      ```
    
    ACKs for top commit:
      achow101:
        ACK 6084d2caed9b2c70c0f19898c33ecb141fe603c8
    
    Tree-SHA512: c7d7345c3182a575db088fd731b7f6e428c42e4f3f2e10d5adb50bf74a2defe88768e65ebb91a08590be48cf766a5697e36fafa73f68ffe45e76a60600f072e2
    185acdb5e8
  147. Merge bitcoin/bitcoin#22348: build: Fix cross build for Windows with Boost Process
    67669ab425b52a2b6be3d2f3b3b7e3939b676a2c build: Fix Boost Process compatibility with mingw-w64 compiler (Hennadii Stepanov)
    
    Pull request description:
    
      On master (9c3751a0c940228c46461c4191f1a57153cb9037) the cross build for Win64 is broken if configured with `--enable-external-signer`:
      ```
      ...
        CXX      crypto/libbitcoin_crypto_base_a-chacha_poly_aead.o
      In file included from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handles.hpp:11,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/used_handles.hpp:17,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/async_in.hpp:20,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/async.hpp:49,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process.hpp:23,
                       from util/system.cpp:9:
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp:208:51: error: expected ‘)’ before ‘*’ token
        208 | typedef ::boost::winapi::NTSTATUS_ (__kernel_entry *nt_system_query_information_p )(
            |                                    ~              ^~
            |                                                   )
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp:223:51: error: expected ‘)’ before ‘*’ token
        223 | typedef ::boost::winapi::NTSTATUS_ (__kernel_entry *nt_query_object_p )(
            |                                    ~              ^~
            |                                                   )
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp: In function ‘boost::winapi::NTSTATUS_ boost::process::detail::windows::workaround::nt_system_query_information(boost::process::detail::windows::workaround::SYSTEM_INFORMATION_CLASS_, void*, boost::winapi::ULONG_, boost::winapi::PULONG_)’:
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp:239:12: error: ‘nt_system_query_information_p’ does not name a type; did you mean ‘nt_system_query_information’?
        239 |     static nt_system_query_information_p f = reinterpret_cast<nt_system_query_information_p>(::boost::winapi::get_proc_address(h, "NtQuerySystemInformation"));
            |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            |            nt_system_query_information
      In file included from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handles.hpp:11,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/used_handles.hpp:17,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/async_in.hpp:20,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/async.hpp:49,
                       from /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process.hpp:23,
                       from util/system.cpp:9:
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp:241:14: error: ‘f’ was not declared in this scope
        241 |     return (*f)(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength);
            |              ^
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp: In function ‘boost::winapi::BOOL_ boost::process::detail::windows::workaround::nt_query_object(boost::winapi::HANDLE_, boost::process::detail::windows::workaround::OBJECT_INFORMATION_CLASS_, void*, boost::winapi::ULONG_, boost::winapi::PULONG_)’:
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp:253:12: error: ‘nt_query_object_p’ does not name a type; did you mean ‘nt_query_object’?
        253 |     static nt_query_object_p f = reinterpret_cast<nt_query_object_p>(::boost::winapi::get_proc_address(h, "NtQueryObject"));
            |            ^~~~~~~~~~~~~~~~~
            |            nt_query_object
      /home/hebasto/GitHub/bitcoin/depends/x86_64-w64-mingw32/include/boost/process/detail/windows/handle_workaround.hpp:255:14: error: ‘f’ was not declared in this scope
        255 |     return (*f)(Handle, ObjectInformationClass, ObjectInformation, ObjectInformationLength, ReturnLength);
            |              ^
      make[2]: *** [Makefile:9906: util/libbitcoin_util_a-system.o] Error 1
      make[2]: *** Waiting for unfinished jobs....
        CXX      crypto/libbitcoin_crypto_base_a-chacha20.o
      make[2]: Leaving directory '/home/hebasto/GitHub/bitcoin/src'
      make[1]: *** [Makefile:16141: all-recursive] Error 1
      make[1]: Leaving directory '/home/hebasto/GitHub/bitcoin/src'
      make: *** [Makefile:820: all-recursive] Error 1
      ```
    
      The upstream bug: https://github.com/boostorg/process/issues/96
      Also see: https://stackoverflow.com/a/59338759
    
      https://github.com/bitcoin/bitcoin/pull/22348#issuecomment-871061160:
      > [This commit](https://github.com/boostorg/process/commit/7fc41b2815822b632d524d5c17897abbdf0c4653), containing the `__kernel_entry` [SAL annotations](https://docs.microsoft.com/en-us/cpp/code-quality/using-sal-annotations-to-reduce-c-cpp-code-defects?view=msvc-160) was included in Boost Process as part of the `1.71.0` release, which broke support for compiling with mingw-w64 because it doesn't define the `__kernel_entry` SAL annotation (but it does define some others, i.e see [`sal.h`](https://github.com/mirror/mingw-w64/blob/master/mingw-w64-headers/include/sal.h)).
      >
      > A [commit was made](https://github.com/boostorg/process/pull/171/commits/d7a721ee0d6859847947f60911259e2c34b0d066) to remove the annotations, however, it hasn't made it into either of the two Boost releases that have happened since (1.75.0 & 1.76.0). Meaning that this is currently needed for all versions of Boost process from 1.71.0 onwards.
    
    ACKs for top commit:
      fanquake:
        ACK 67669ab425b52a2b6be3d2f3b3b7e3939b676a2c - thanks for updating this.
    
    Tree-SHA512: 5931ca1fb77ce38c042cf5a7556add024ea2386c208bf26c792a8ca4a771d97fac9802c32fa8aa2e3de1ad35f3362d8c066f0a83ee675859d226c602fd0bcf93
    2749613020
  148. Translations update
    Translation string freeze, see Release schedule for 22.0.
    c7f74f1a7f
  149. Merge bitcoin-core/gui#377: Translations update
    c7f74f1a7fe6afd4851705751f3c0ba278016ac5 Translations update (Hennadii Stepanov)
    
    Pull request description:
    
      Translation string freeze, see [Release schedule for 22.0](https://github.com/bitcoin/bitcoin/issues/20851).
    
    ACKs for top commit:
      laanwj:
        ACK c7f74f1a7fe6afd4851705751f3c0ba278016ac5, I get the same output
    
    Tree-SHA512: 85c12a88290f46db0d6724ef51c2789bb1f7dfc242682b95420cb1310cb986e8d8a53e628fb7e184008ca23236e36bb5dc8ea65c4e41e01ca2c8f17863894125
    091d35c70e
  150. Merge bitcoin/bitcoin#22310: test: Add functional test for replacement relay fee check
    c4ddee64c7f80eee05a95116ef1b1dc8a7601183 test: Add test for replacement relay fee check (Antoine Riard)
    
    Pull request description:
    
      This PR adds rename the `reject_reason` of our implementation of BIP125 rule 4 and adds missing functional test coverage. Note, `insufficient fee` is already the `reject_reason` of few others `PreChecks` replacement checks and as such might be confusing.
    
      > The replacement transaction must also pay for its own bandwidth at or above the rate set by the node's minimum relay fee setting. For example, if the minimum relay fee is 1 satoshi/byte and the replacement transaction is 500 bytes total, then the replacement must pay a fee at least 500 satoshis higher than the sum of the originals.
    
      ```
              // Finally in addition to paying more fees than the conflicts the
              // new transaction must pay for its own bandwidth.
              CAmount nDeltaFees = nModifiedFees - nConflictingFees;
              if (nDeltaFees < ::incrementalRelayFee.GetFee(nSize))
              {
                  return state.Invalid(TxValidationResult::TX_MEMPOOL_POLICY, "insufficient fee",
                          strprintf("rejecting replacement %s, not enough additional fees to relay; %s < %s",
                              hash.ToString(),
                              FormatMoney(nDeltaFees),
                              FormatMoney(::incrementalRelayFee.GetFee(nSize))));
              }
      ```
    
    ACKs for top commit:
      MarcoFalke:
        cr ACK c4ddee64c7f80eee05a95116ef1b1dc8a7601183
      glozow:
        ACK c4ddee6, one small suggestion if you retouch.
    
    Tree-SHA512: 7c5d1065db6e6fe57a9f083bf051a7a55eb9892de3a2888679d4a6853491608c93b6e35887ef383a9988d14713fa13a0b1d6134b7354af5fd54765f0d4e98568
    a926d6dfd2
  151. Merge bitcoin/bitcoin#19438: Introduce deploymentstatus
    e48826ad87b4f92261f7433e84f48dac9bd9e5c3 tests: remove ComputeBlockVersion shortcut from versionbits tests (Anthony Towns)
    c5f36725e877d8eb492383844f8ef7535466b366 [refactor] Move ComputeBlockVersion into VersionBitsCache (Anthony Towns)
    4a69b4dbe0d7f504811b67c399da7e6d11e4f805 [move-only] Move ComputeBlockVersion from validation to versionbits (Anthony Towns)
    0cfd6c6a8f929d5567ac41f95c21548f115efee5 [refactor] versionbits: make VersionBitsCache a full class (Anthony Towns)
    8ee3e0bed5bf2cd3c7a68ca6ba6c65f7b9a72cca [refactor] rpc/blockchain.cpp: SoftForkPushBack (Anthony Towns)
    92f48f360da5f425428b761219301f509826bec4 deploymentinfo: Add DeploymentName() (Anthony Towns)
    ea68b3a5729f5d240e968388c4f88acffeb27228 [move-only] Rename versionbitsinfo to deploymentinfo (Anthony Towns)
    c64b2c6a0f79369624ae96b2e3d579d50aae4de6 scripted-diff: rename versionbitscache (Anthony Towns)
    de55304f6e7a8b607e6b3fc7436de50910747b0c [refactor] Add versionbits deployments to deploymentstatus.h (Anthony Towns)
    2b0d291da8f479739ff394dd92801da8c40b9f8e [refactor] Add deploymentstatus.h (Anthony Towns)
    eccd736f3dc231ac0306ca763c3b72cf8247230a versionbits: Use dedicated lock instead of cs_main (Anthony Towns)
    36a4ba0aaaa9b35185d7178994e36bc02cca9887 versionbits: correct doxygen comments (Anthony Towns)
    
    Pull request description:
    
      Introduces helper functions to make it easy to bury future deployments, along the lines of the suggestion from [11398](https://github.com/bitcoin/bitcoin/pull/11398#issuecomment-335599326) "I would prefer it if a buried deployment wouldn't require all code paths that check the BIP9 status to require changing".
    
      This provides three functions: `DeploymentEnabled()` which tests if a deployment can ever be active, `DeploymentActiveAt()` which checks if a deployment should be enforced in the given block, and `DeploymentActiveAfter()` which checks if a deployment should be enforced in the block following the given block, and overloads all three to work both with buried deployments and versionbits deployments.
    
      This adds a dedicated lock for the versionbits cache, which is acquired internally by the versionbits functions, rather than relying on `cs_main`. It also moves moves versionbitscache into deploymentstatus to avoid a circular dependency with validation.
    
    ACKs for top commit:
      jnewbery:
        ACK e48826ad87b4f92261f7433e84f48dac9bd9e5c3
      gruve-p:
        ACK https://github.com/bitcoin/bitcoin/pull/19438/commits/e48826ad87b4f92261f7433e84f48dac9bd9e5c3
      MarcoFalke:
        re-ACK e48826ad87b4f92261f7433e84f48dac9bd9e5c3 🥈
    
    Tree-SHA512: c846ba64436d36f8180046ad551d8b0d9e20509b9bc185aa2639055fc28803dd8ec2d6771ab337e80da0b40009ad959590d5772f84a0bf6199b65190d4155bed
    ddc6979b8b
  152. doc: Move buried deployment doc to the enum that enumerates them
    This is more visible than a comment hidden in an RPC helper function.
    fa11fecf0d
  153. Use DeploymentEnabled to hide VB deployments
    The helper was previously unused. This commit changes it to be more
    meaningful and puts it to use.
    
    See previous discussion at https://github.com/bitcoin/bitcoin/pull/19438/files#r650687320
    fa5658ed07
  154. guix: Rebase toolchain on glibc 2.24 (2.27 for riscv64)
    Support for riscv64 in glibc landed in 2.27 so it's unavoidable that we
    use 2.27.
    
    Running a Bitcoin build with toolchains based on 2.24 for platforms
    other than riscv64 seem to produce binaries which do not have 2.17
    symbols. So use 2.24 since it's more recent and maintained by Debian
    Stretch.
    16b0a936e1
  155. guix: Build depends/qt with our platform definition
    Our 'bitcoin-linux-g++' definition better integrates with our depends
    system than the stock linux-g++-64 definition.
    
    This fixes a bug whereby Guix builds on x86_64 for x86_64 did not
    produce a QMinimalIntegrationPlugin and led to bitcoin-qt not being
    built.
    dc4137a60c
  156. ci: use Ubuntu 20.04 as the default Docker container
    All but 2 of the Ubuntu CIs are already using 20.04 or 21.04.
    7fc1e14ce6
  157. Merge bitcoin/bitcoin#22388: ci: use Ubuntu 20.04 as the default Docker container
    7fc1e14ce60d4e0533c7ccc65a9b24052d7a608f ci: use Ubuntu 20.04 as the default Docker container (fanquake)
    
    Pull request description:
    
      All but 2 of the Ubuntu CIs (native qt5 & nowallet) are already using 20.04 or 21.04.
    
    ACKs for top commit:
      MarcoFalke:
        cr ACK 7fc1e14ce60d4e0533c7ccc65a9b24052d7a608f
    
    Tree-SHA512: f35d79a87af6c6955695b5e627884f94aed19bafaed4657d03ef4db66cf47cae5311464bb39961570140325652941283b9d88dff862776e8becfff9130162917
    7a49fdc581
  158. guix: Also sort SHA256SUMS.part 647f7e5f1d
  159. doc: Add steps for transifex to release process
    Document how to update settings on and for the transifex website before
    and after branch-off of a new release.
    2584929823
  160. doc: Remove unnecessary steps from translations update process
    These have been integrated into the script long ago.
    a16378e501
  161. fuzz: Move ConsumeTxDestination to cpp file
    Moving the implementation out of the header will reduce compile time
    fa40c0964b
  162. fuzz: Improve ConsumeTxDestination
    * Assert when a type is missing
    * Add missing WitnessV1Taproot
    * Limit WitnessUnknown to version [2, 16], to avoid abiguity
    * Limit WitnessUnknown to size [2, 40], to avoid invalid sizes
    fab99865c0
  163. fuzz: Simplify CTxDestination fuzzing in the script target
    The WitnessUnknown operators == and < are already called indirectly by
    the corresponding CTxDestination operators.
    fa42800a51
  164. fuzz: Move CTxDestination fuzzing to script fuzz target
    No need to split it over several targets
    fabf17056c
  165. Merge bitcoin/bitcoin#22292: bench, doc: benchmarking updates and fixups
    d8513fe41102dcbfc05235f3b95e33eb1878f880 doc: update doc/benchmarking.md (Jon Atack)
    84e2d5b78181d08b258c77f9c9c4e1bb7fdaa451 bench: bench_bitcoin.cpp help fixups (Jon Atack)
    10f4ce20783cbbcb0c0997c605452d9e60827e6d bench: bench.h fixes and improvements (Jon Atack)
    
    Pull request description:
    
      Fixups and updates I noticed while writing benchmarks for #22284.
    
    ACKs for top commit:
      za-kk:
        ACK d8513fe41102dcbfc05235f3b95e33eb1878f880
      theStack:
        ACK d8513fe41102dcbfc05235f3b95e33eb1878f880 🚤
    
    Tree-SHA512: d494956b5d6a3329e98e8b6f4405a10613b8fce51a04bbf4493d8b3497b8d5b177c1a9a3eeb828796eb4edb92b0ace769595151e223671c0dc8f09bcf631ebb5
    c609e10545
  166. Use C++17 [[fallthrough]] attribute, and drop -Wno-implicit-fallthrough 014110c47d
  167. build: Add -Werror=implicit-fallthrough compile flag 3c4c8e79ba
  168. doc: Install Rosetta on M1-macOS for qt in depends cdb41d5573
  169. Merge bitcoin/bitcoin#22365: guix: Avoid relying on newer symbols by rebasing our cross toolchains on older glibcs
    647f7e5f1da1089d451f3c431efc635b8e87b064 guix: Also sort SHA256SUMS.part (Carl Dong)
    dc4137a60c99979b89f75d2bddba96d043f387b8 guix: Build depends/qt with our platform definition (Carl Dong)
    16b0a936e15b81710755303e11ef51f608b61475 guix: Rebase toolchain on glibc 2.24 (2.27 for riscv64) (Carl Dong)
    
    Pull request description:
    
      After this PR, we'll have the following:
      - riscv64 -> build with a toolchain targeting glibc 2.27
      - everything else -> builds with a toolchain targeting glibc 2.24, but will not have symbols > 2.17 (checked by `symbol-check.py`)
    
    ACKs for top commit:
      achow101:
        reACK 647f7e5f1da1089d451f3c431efc635b8e87b064
      hebasto:
        ACK 647f7e5f1da1089d451f3c431efc635b8e87b064
      MarcoFalke:
        review ACK 647f7e5f1da1089d451f3c431efc635b8e87b064
      fanquake:
        ACK 647f7e5f1da1089d451f3c431efc635b8e87b064 - documentation can be fixed shortly.
    
    Tree-SHA512: ddff57a5d7c053687b0a273720d4ad7d28c6fc8816226d4304869284d017af5e3630d4b57565d91e74f2e1b7583c9c83ee8b2e5e70e41d619ab618e602c97a94
    2711559845
  170. build: remove --enable-determinism configure option e46287853f
  171. test: use script_util helpers for creating P2SH scripts 285a65ccfd
  172. test: use script_util helpers for creating P2W{PKH,SH} scripts 905d672b74
  173. Merge bitcoin-core/gui#365: Draw "eye" sign at the beginning of watch-only addresses
    cd46c11577a05f3dc9eac94f27a6985f6ba0509e qt: Draw "eye" sign at the beginning of watch-only addresses (Hennadii Stepanov)
    9ea1da6fc91e17bdaa722001b97aadf576f07f65 qt: Do not extend recent transaction width to address/label string (Hennadii Stepanov)
    
    Pull request description:
    
      This PR guaranties that the "eye" sign won't be hidden for very long addresses/labels.
    
      No longer need to extend `TransactionOverviewWidget` widget width to make "eye" signs shown:
    
      ![Screenshot from 2021-06-15 00-21-05](https://user-images.githubusercontent.com/32963518/121961807-9123b600-cd70-11eb-8cdd-8b2b0d1bf44f.png)
    
      Fixes https://github.com/bitcoin-core/gui/issues/373
    
    ACKs for top commit:
      jarolrod:
        ACK cd46c11577a05f3dc9eac94f27a6985f6ba0509e
    
    Tree-SHA512: 0602b5bb65d53c5b18e86260750006bba03adbae181917b5a2b7f89b17290bd1f57b4f80adaba32f42cc6fb468598a888b12c0b6b09005d2f2c07bd4d1ad334a
    484d4ee226
  174. test: add `bad-txns-prevout-null` test case to invalid_txs.py
    This reject reason is triggered for non-coinbase transactions with
    a coinbase-like outpoint, i.e. hash=0, n=0xffffffff.
    
    Note that the invalid tx templates are currently used in the
    functional tests feature_block.py and p2p_invalid_tx.py.
    aa0a5bb70d
  175. Merge bitcoin-core/gui#375: Emit dataChanged signal to dynamically re-sort Peers table
    986bf78d7e8fd9b69841ecb0decaff840efe9cff qt: Emit dataChanged signal to dynamically re-sort Peers table (Hennadii Stepanov)
    
    Pull request description:
    
      [By default](https://doc.qt.io/qt-5/qsortfilterproxymodel.html#details), the `PeerTableSortProxy`
      > dynamically re-sorts ... data whenever the original model changes.
    
      That is not the case on master (8cdf91735f2bdc55577d84a9915f5920ce23b00a) as in ecbd91153875c8cdd5b92b840afc116f65e457fb (#164) no signals are emitted to notify about model changes.
    
      This PR uses a dedicated [`dataChanged`](https://doc.qt.io/qt-5/qabstractitemmodel.html#dataChanged) signal.
    
      Fixes #367.
    
      An alternative to #374.
    
    ACKs for top commit:
      jarolrod:
        ACK 986bf78d7e8fd9b69841ecb0decaff840efe9cff
    
    Tree-SHA512: dcb92c2f9a2c632880429e9528007db426d2ad938c64dfa1f1538c03e4b62620df52ad7daf33b582976c67b472ff76bc0dae707049f4bbbd4941232cee9ce3d4
    a62fc35a15
  176. test: add `bad-txns-prevout-null` test to mempool_accept.py 1f449586a9
  177. Merge bitcoin/bitcoin#22406: build: remove --enable-determinism configure option
    e46287853f3a41c3f0772d3448d8df4ea01a156f build: remove --enable-determinism configure option (fanquake)
    
    Pull request description:
    
      This was added by me a while back, with the intention of expanding what this did. That hasn't happened, and this hasn't gained much use. There's also been some discussion of some configure option fatigue, so just remove it for now. Note that `-Wl,--no-insert-timestamp` is also already used in the Guix build.
    
    ACKs for top commit:
      MarcoFalke:
        review ACK e46287853f3a41c3f0772d3448d8df4ea01a156f
      jarolrod:
        Code Review ACK e46287853f3a41c3f0772d3448d8df4ea01a156f
    
    Tree-SHA512: ac976f88203eca2a49e296a98693dbe53330e0cb0e273c5ff1fcded30daeb6070cc5beeae35cf9acfdc2279cd64c274d5aeb588aef077aa9bfde39bb23570491
    088b348dbe
  178. build: remove glibc backcompat requirement for Linux symbol checks 84dd81fb5b
  179. guix: no-longer pass --enable-glibc-back-compat to Guix
    Now that our Guix builds are performed on glibc 2.24 and 2.27 (RISCV),
    we no-longer need to pass the --enable-glibc-back-compat option.
    
    Replace it with --disable-threadlocal, to prevent the usage of symbols
    from glibc 2.18.
    
    None of the binaries produced required symbols later than 2.17, and 2.27
    (RISCV).
    de6ca41a52
  180. lint: exclude Guix patches from spell-checking
    Co-authored-by: Carl Dong <contact@carldong.me>
    4516e5ec92
  181. guix: add additional documentation to patches 15fc9a0299
  182. script: remove gitian reference from symbol-check.py 797b3ed909
  183. doc: added info to bitcoin.conf doc fa84caebc7
  184. refactor: move GetRandomNodeEvictionCandidates() to test utilities
    Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
    566357f8f7
  185. Avoid GCC 7.1 ABI change warning in guix build 1edddf5de4
  186. Merge bitcoin/bitcoin#22360: doc: Remove unused section from release process
    fa051d3e5e50fb5726fc25464fef348255599e1e doc: Remove unused section from release process (MarcoFalke)
    
    Pull request description:
    
      The section does not apply to us, because it is being done by the maintainers of the `bitcoin.org` website, see https://github.com/bitcoin-dot-org/Bitcoin.org/issues/3641#issuecomment-819586576 . Documentation about the process is in their repo: https://github.com/bitcoin-dot-org/bitcoin.org/blob/master/docs/adding-events-release-notes-and-alerts.md#release-notes
    
    ACKs for top commit:
      jarolrod:
        ACK fa051d3e5e50fb5726fc25464fef348255599e1e
      Zero-1729:
        ACK fa051d3e5e50fb5726fc25464fef348255599e1e
      fanquake:
        ACK fa051d3e5e50fb5726fc25464fef348255599e1e
    
    Tree-SHA512: eadc192958bb0d1009ad94c2ec79087b87514e3d19e2e6d759440392fa4abc432c512ba60692018e789c822a98a515a5f9a42966de4f8fe6b0a8b99470a76b5c
    692b78793b
  187. Merge bitcoin/bitcoin#22399: fuzz: Rework CTxDestination fuzzing
    fabf17056c1046c6ac7fa5d140125050b7a2b0e0 fuzz: Move CTxDestination fuzzing to script fuzz target (MarcoFalke)
    fa42800a51919bb50a1000ac4f58847e6a7092a3 fuzz: Simplify CTxDestination fuzzing in the script target (MarcoFalke)
    fab99865c0e62468a1b55d7e467398cc2343121b fuzz: Improve ConsumeTxDestination (MarcoFalke)
    fa40c0964b751683774b79da4b72d330a9ff87e2 fuzz: Move ConsumeTxDestination to cpp file (MarcoFalke)
    
    Pull request description:
    
    ACKs for top commit:
      practicalswift:
        cr ACK fabf17056c1046c6ac7fa5d140125050b7a2b0e0
    
    Tree-SHA512: afd2cf384d04a810c0c462c6d80849bd0fefd017d7acac877f64f2bffae3fc8d687701bc479e67a727a05f43431a17cb4ccaf09c6b3c68106562c94b7ed19250
    914c0cad97
  188. Merge bitcoin/bitcoin#22405: build: remove --enable-glibc-back-compat from Guix build
    797b3ed9090030f32fade81803b580562d4a90a3 script: remove gitian reference from symbol-check.py (fanquake)
    15fc9a0299091bfeb3370f993ad95ff638f6ba8c guix: add additional documentation to patches (fanquake)
    4516e5ec9223486fe2eba7f4320d786d074a58fd lint: exclude Guix patches from spell-checking (fanquake)
    de6ca41a52d2646598daae5f4620bbe766757e21 guix: no-longer pass --enable-glibc-back-compat to Guix (fanquake)
    84dd81fb5bf7308b8070b53520266854fb6efad3 build: remove glibc backcompat requirement for Linux symbol checks (fanquake)
    
    Pull request description:
    
      Now that our Guix toolchains are based on glibc 2.24 and 2.27 (RISCV), we don't need to use the `--enable-glibc-back-compat` option to produce binaries that don't use any symbols from glibc 2.17 and 2.27 or later.
    
      This also adds additional documentation to some Guix patches (pointed out in #22365) and removes Guix patches from the spelling linter, because that isn't our spelling.
    
      Symbol usage: https://gist.github.com/fanquake/d15604fc580718444c5aa4b3c3c75fdc.
    
      Guix Builds:
      ```bash
      bash-5.1# find guix-build-$(git rev-parse --short=12 HEAD)/output/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum
      ed54e6a6cf4fab328557c0c72eb08c73f2a58c6c70959544cf4b1882e75ea69e  guix-build-797b3ed90900/output/aarch64-linux-gnu/SHA256SUMS.part
      83bd9dadc59f89f848d143fa4fc3964f16fe0b4bdf35e5093b577ff2c4bd1f43  guix-build-797b3ed90900/output/aarch64-linux-gnu/bitcoin-797b3ed90900-aarch64-linux-gnu-debug.tar.gz
      94cb8c35281f12dec6ea5b390b66cad5e27ac8c45a30c42c8d38c438695d54c0  guix-build-797b3ed90900/output/aarch64-linux-gnu/bitcoin-797b3ed90900-aarch64-linux-gnu.tar.gz
      7318b63d65c0aa52d2446de8e1f40658d2e47ab8fb0268820c3b7585d140fb23  guix-build-797b3ed90900/output/arm-linux-gnueabihf/SHA256SUMS.part
      95e1ffb372964b73f539653ca703b70cf0c018801a9c4c0ffc46a0b63539253c  guix-build-797b3ed90900/output/arm-linux-gnueabihf/bitcoin-797b3ed90900-arm-linux-gnueabihf-debug.tar.gz
      039d3842e6499626cf955ae0a7590dd6b3d0935cdc217c98aaf9d156b0ebd3b4  guix-build-797b3ed90900/output/arm-linux-gnueabihf/bitcoin-797b3ed90900-arm-linux-gnueabihf.tar.gz
      e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  guix-build-797b3ed90900/output/dist-archive/SKIPATTEST.TAG
      2c4e7b6e7aff63ba811e5bf59362d16866c3a358f8844fba8739a61192870622  guix-build-797b3ed90900/output/dist-archive/bitcoin-797b3ed90900.tar.gz
      955029b949c368eabd517dd33040d2f01e2ac6a55e7b4f9107907a7c6e0c6060  guix-build-797b3ed90900/output/powerpc64-linux-gnu/SHA256SUMS.part
      fd6d6b137f8efedf58a879d11205b1d4649e1f97d7f91e193239ef206fcc285d  guix-build-797b3ed90900/output/powerpc64-linux-gnu/bitcoin-797b3ed90900-powerpc64-linux-gnu-debug.tar.gz
      51736ac8e77737999f1b5bd4c381b0016f19a8d5e40e786fe941ff04e84c11c9  guix-build-797b3ed90900/output/powerpc64-linux-gnu/bitcoin-797b3ed90900-powerpc64-linux-gnu.tar.gz
      8c244c16bfa46c1efdb120e1d91fdd14d3f14eefee8d7e1fbb0a9b4664a5c315  guix-build-797b3ed90900/output/powerpc64le-linux-gnu/SHA256SUMS.part
      704ee593251a1b1c65a5bebeef93b23f266af4e8cbf8ae556150c3b2e8f06a6c  guix-build-797b3ed90900/output/powerpc64le-linux-gnu/bitcoin-797b3ed90900-powerpc64le-linux-gnu-debug.tar.gz
      0ec06ae7d344de20d61e3965d8b383747ef20b0e9d93a3165733ea23bdf2ead8  guix-build-797b3ed90900/output/powerpc64le-linux-gnu/bitcoin-797b3ed90900-powerpc64le-linux-gnu.tar.gz
      2dd6c6ecc67b0ea40ca9c43f92efca81ccd054b8db8c197ad84ad9674d510a25  guix-build-797b3ed90900/output/riscv64-linux-gnu/SHA256SUMS.part
      5ebb27a855a677f7a188d83995be6b2a3ea8606be152abb7fc7832713fb0677a  guix-build-797b3ed90900/output/riscv64-linux-gnu/bitcoin-797b3ed90900-riscv64-linux-gnu-debug.tar.gz
      bdaf1783f5e1861597afa37c1880364e118d9a7a7af8017302d82202791019f6  guix-build-797b3ed90900/output/riscv64-linux-gnu/bitcoin-797b3ed90900-riscv64-linux-gnu.tar.gz
      726c9092b60ac2e7d7e14b2c24467fcf276a6f89170a871ddab9dce6ac230699  guix-build-797b3ed90900/output/x86_64-apple-darwin18/SHA256SUMS.part
      2af4d709b44952654f3c08c86593bf2ccc9a44ed422783a1b95b8a199a894db2  guix-build-797b3ed90900/output/x86_64-apple-darwin18/bitcoin-797b3ed90900-osx-unsigned.dmg
      fd49ba445aa6cf3d8c47019a05e9e5740cb0f53349344dd80671297127f49f1a  guix-build-797b3ed90900/output/x86_64-apple-darwin18/bitcoin-797b3ed90900-osx-unsigned.tar.gz
      3f51cbf8cf18420d4be70e656aa993675cf5e828a255c2030047ae2e059ed5b7  guix-build-797b3ed90900/output/x86_64-apple-darwin18/bitcoin-797b3ed90900-osx64.tar.gz
      afd1edee1447bb88d81e972abfae4c4e065b5b1827769f033cff9472084c7c1b  guix-build-797b3ed90900/output/x86_64-linux-gnu/SHA256SUMS.part
      ec468ef886d25e685f4f7a18b4f7d497dedf757495e0d5beb72c23cc32ab69b5  guix-build-797b3ed90900/output/x86_64-linux-gnu/bitcoin-797b3ed90900-x86_64-linux-gnu-debug.tar.gz
      1934d7294f0c9e083d38a3f68d4a61cd679defa79ce0a89f77386978692b9b18  guix-build-797b3ed90900/output/x86_64-linux-gnu/bitcoin-797b3ed90900-x86_64-linux-gnu.tar.gz
      94c11c328a628052eb6f50e9816aa768f87ea7acfbbbafdab60f6928da766811  guix-build-797b3ed90900/output/x86_64-w64-mingw32/SHA256SUMS.part
      fd371922ba93d81bd4a2b711d617af6756f9f0494db6d83aa0e5f491a24168ef  guix-build-797b3ed90900/output/x86_64-w64-mingw32/bitcoin-797b3ed90900-win-unsigned.tar.gz
      4e4ad976bc029bbbf9596ad8493accaaba8b0d5c598dd342f8da330609bbdf21  guix-build-797b3ed90900/output/x86_64-w64-mingw32/bitcoin-797b3ed90900-win64-debug.zip
      3a89a16b9101e9a17d98efb9234b5bdd264c0bba2c6326511017730e1a08311f  guix-build-797b3ed90900/output/x86_64-w64-mingw32/bitcoin-797b3ed90900-win64-setup-unsigned.exe
      e285ab737e3c843fd3f1c26c2f053e421a3c39b33995747ce48281884d3f28d1  guix-build-797b3ed90900/output/x86_64-w64-mingw32/bitcoin-797b3ed90900-win64.zip
      ```
    
    ACKs for top commit:
      sipa:
        utACK 797b3ed9090030f32fade81803b580562d4a90a3
      hebasto:
        ACK 797b3ed9090030f32fade81803b580562d4a90a3
    
    Tree-SHA512: 3a569702d8832c155c5ce8d2f6d823f7f12603885576078bc5192bc9038a48261ecb541800f79d1e9bc86d71fa640265c5b8b89df9d8bb680b3bb05d9d78a666
    137f3b9ba3
  189. lint: Run mypy with --show-error-codes
    When using mypy ignore directives, the error code needs to be specified.
    Somehow mypy doesn't print it by default...
    d6ef3543ae
  190. ci: skip running the Linux test-security-check target for now
    The CI environment is a moving target, and these tests are somewhat
    fragile, so for now, disable them.
    bda62eab38
  191. devtools: Improve *-check.py tool detection
    This is important to make sure that we're not testing tools different
    from the one we're building with.
    
    Introduce determine_wellknown_cmd, which encapsulates how we
    should handle well-known tools specification (IFS splitting, env
    override, etc.).
    9fdc8afe11
  192. guix: Patch binutils to add security-related disable flags
    We use these flags in our test-security-check make target, but they are
    only available because debian patches them in.
    
    We can patch them in for our Guix builds so that we can check the sanity
    of our security/symbol checking suite before running them.
    678348db51
  193. build: Use and test PE binutils with --reloc-section
    Also fix test-security-check.py to account for new PE PIE failure
    indication.
    a8127b34bc
  194. scripts: more robustly test macOS symbol checks 1946b5f77c
  195. scripts: adjust test-symbol-check for guix release environment
    Now that our release binaries are build in a glibc 2.24 and 2.27
    environment, we can't use a symbol from glibc 2.28 to test our checks.
    Replace renameat2() with nextup(), which was introduced in 2.24.
    
    Note that this also means re-disabling the test for RISC-V, however
    RISC-V is built in a glibc 2.27 environment, and our minimum required
    glibc for that binary is 2.27.
    6cf3345297
  196. guix: Test security-check sanity before performing them 5b4703c6a7
  197. Merge bitcoin/bitcoin#22402: doc: Install Rosetta on M1-macOS for qt in depends
    cdb41d5573b1e2ed1bc1d8d1dc9f77e82672ee1f doc: Install Rosetta on M1-macOS for qt in depends (Hennadii Stepanov)
    
    Pull request description:
    
      On master (c609e10545492aba480ff17aff7eefc13a0b5cd8) `make -C depends qt` on Apple Silicon based macOS 11.4 ends with an error:
      ```
      /bin/sh: /Users/hebasto/bitcoin/depends/work/build/aarch64-apple-darwin20.5.0/qt/5.12.11-6c4d47a8f8f/qtbase/bin/moc: Bad CPU type in executable
      ```
    
      Installing Rosetta 2 fixes it.
    
      Explanation. On Apple Silicon macOS the `qt` package in depends actually is cross compiled. All native tools (including `moc`) are x86_64 binaries, that require Rosetta 2 to run.
    
    ACKs for top commit:
      promag:
        ACK cdb41d5573b1e2ed1bc1d8d1dc9f77e82672ee1f.
      fanquake:
        ACK cdb41d5573b1e2ed1bc1d8d1dc9f77e82672ee1f - I have not tested after installing Rosetta 2, but I saw the same issue during my first cross-compile on an M1 box.
      Zero-1729:
        ACK cdb41d5573b1e2ed1bc1d8d1dc9f77e82672ee1f
    
    Tree-SHA512: fb06a32d6fb40f405ce856b44f5d3af0c51089886f3be79e509e5c325614d7af58ce4480c064c17e0efb695a1f69f68d533c417f9631d46d8a630aba60ce4433
    4129134e84
  198. net: don't bind on 0.0.0.0 if binds are restricted to Tor
    The semantic of `-bind` is to restrict the binding only to some address.
    If not specified, then the user does not care and we bind to `0.0.0.0`.
    If specified then we should honor the restriction and bind only to the
    specified address.
    
    Before this change, if no `-bind` is given then we would bind to
    `0.0.0.0:8333` and to `127.0.0.1:8334` (incoming Tor) which is ok -
    the user does not care to restrict the binding.
    
    However, if only `-bind=addr:port=onion` is given (without ordinary
    `-bind=`) then we would bind to `addr:port` _and_ to `0.0.0.0:8333` in
    addition.
    
    Change the above to not do the additional bind: if only
    `-bind=addr:port=onion` is given (without ordinary `-bind=`) then bind
    to `addr:port` (only) and consider incoming connections to that as Tor
    and do not advertise it. I.e. a Tor-only node.
    2feec3ce31
  199. [validation] distinguish same txid different wtxid in mempool
    Changes behavior.
    fdb48163bf
  200. [test] submit same txid different wtxid as mempool tx
    Co-authored-by: Antoine Riard <ariard@student.42.fr>
    Co-authored-by: Antoine Riard <antoine.riard@gmail.com>
    b7a8cd9963
  201. bench: add peer eviction protection benchmarks
    Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
    5adb064574
  202. p2p: iterate eviction protection only on networks having candidates
    in ProtectEvictionCandidatesByRatio().
    
    Thank you to Vasil Dimov, whose suggestions during a post-merge
    discussion about PR 21261 reminded me that I had done this in
    earlier versions of the PR, e.g. commits like ef411cd2.
    
    Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
    02e411ec45
  203. p2p: process more candidates per protection iteration
    for the usual case when some of the protected networks
    don't have eviction candidates, to reduce the number
    of iterations in ProtectEvictionCandidatesByRatio().
    
    Picks up an idea in ef411cd2 that I had dropped.
    c9e8d8f9b1
  204. p2p: earlier continuation when no remaining eviction candidates
    in ProtectEvictionCandidatesByRatio().
    
    With this change, `if (n.count == 0) continue;` will be true
    if a network had candidates protected in the first iterations
    and has no candidates remaining to be protected in later iterations.
    
    Co-authored-by: Jon Atack <jon@atack.com>
    b1d905c225
  205. Merge bitcoin/bitcoin#22179: Torv2 removal followups
    00b875ba9414463d0041da6924fd9b54d6a06dee addrman: remove invalid addresses when unserializing (Vasil Dimov)
    bdb62096f0109b2ec76849d33d6cf7187dea299f fuzz: reduce possible networks check (Vasil Dimov)
    a164cd3ba694ffeba03b2887a411b7f82f6c087e net: simplify CNetAddr::IsRoutable() (Vasil Dimov)
    
    Pull request description:
    
      * Simplify some code, now that we know `CNetAddr::IsRFC4193()` and `CNetAddr::IsTor()` cannot be `true` at the same time.
      * Drop Tor v2 addresses when loading addrman from `peers.dat` - they would have been loaded as dummy-all-zeros IPv6 addresses and linger in addrman, wasting space.
    
    ACKs for top commit:
      sipa:
        ACK 00b875ba9414463d0041da6924fd9b54d6a06dee. Reviewed the code, and tested with -DDEBUG_ADDRMAN (unit tests + mainnet run with peers.dat that contained v2 onions).
      laanwj:
        Code review and lightly tested ACK 00b875ba9414463d0041da6924fd9b54d6a06dee
      jonatack:
        ACK 00b875ba9414463d0041da6924fd9b54d6a06dee reviewed, debug-built with -DEBUG_ADDRMAN rebased to current master, restarted node on mainnet/signet/testnet and verified that on each chain -addrinfo shows no change in address counts (as expected). Added some sanity check asserts, rebuilt/re-ran test. Checked that the new test fails on master with "test/addrman_tests.cpp(824): error: in "addrman_tests/remove_invalid": check addrman.size() == 2 has failed [4 != 2]"
      jarolrod:
        ACK 00b875ba9414463d0041da6924fd9b54d6a06dee
    
    Tree-SHA512: 6ed8e6745134b1b94fffaba28482de909ea39483b46b7f57bda61cdbae7a51251d15cb674de3631772fbeabe153d77a19269f96e62a89102a2d5c01e48f0ba06
    d968616422
  206. Merge bitcoin/bitcoin#22408: test: add tests for `bad-txns-prevout-null` reject reason
    1f449586a9e39bc4fb53cb5c7a31362e47aea19b test: add `bad-txns-prevout-null` test to mempool_accept.py (Sebastian Falbesoner)
    aa0a5bb70d77739d43d5a9ceae78fb0c6fafd435 test: add `bad-txns-prevout-null` test case to invalid_txs.py (Sebastian Falbesoner)
    
    Pull request description:
    
      This simple PR adds missing tests for the reject reason `bad-txns-prevout-null`, which is thrown in the function `CheckTransaction()`: https://github.com/bitcoin/bitcoin/blob/a62fc35a150da584d39d7cd01ade14bbb5002fb9/src/consensus/tx_check.cpp#L52-L54
    
      Basically this condition is met for non-coinbase transactions (the code snippet above only hits if `!tx.IsCoinBase()`) with coinbase-like outpoints, i.e. hash=0, n=0xffffffff.
    
      Can be tested by running the functional tests `feature_block.py`, `p2p_invalid_tx.py` and `mempool_accept.py`. Not sure if the redundancy in the tests is desired (I guess it would make sense if the mempool acceptance test also makes use of the invalid_txs templates?).
    
    ACKs for top commit:
      rajarshimaitra:
        tACK https://github.com/bitcoin/bitcoin/pull/22408/commits/1f449586a9e39bc4fb53cb5c7a31362e47aea19b
      brunoerg:
        tACK 1f449586a9e39bc4fb53cb5c7a31362e47aea19b
      kristapsk:
        ACK 1f449586a9e39bc4fb53cb5c7a31362e47aea19b, code looks correct and all tests pass.
    
    Tree-SHA512: 2d4f940a6ac8e0d80d2670c9e1111cbf43ae6ac62809a2ccf17cffee9a41d387ea4d889ee300eb4a407c055b13bfa5d37102a32ed59964a9b6950bd907ba7204
    df2b5dadfb
  207. Merge bitcoin/bitcoin#22381: guix: Test security-check sanity before performing them (with macOS)
    5b4703c6a70db2fa72fcace56a15db07d4b0acf1 guix: Test security-check sanity before performing them (Carl Dong)
    6cf3345297d371b4785d80d54e802b52ff09e8c2 scripts: adjust test-symbol-check for guix release environment (fanquake)
    1946b5f77cb5a6bb37500252079c3582cac4a6c9 scripts: more robustly test macOS symbol checks (fanquake)
    a8127b34bce3597b8091e14057c926197966a234 build: Use and test PE binutils with --reloc-section (Carl Dong)
    678348db515c770c4dddfac512cdd97be11d407d guix: Patch binutils to add security-related disable flags (Carl Dong)
    9fdc8afe117b7b1ea845f8acae9e831922b8f92b devtools: Improve *-check.py tool detection (Carl Dong)
    bda62eab38c5dd74e222eddedbca19ace9df6daa ci: skip running the Linux test-security-check target for now (fanquake)
    d6ef3543ae16847d5a91fa9271acee9bd2164b32 lint: Run mypy with --show-error-codes (Carl Dong)
    
    Pull request description:
    
      This is #20980 rebased (to include the Boost Process fix), and with an additional commit (892d6897f1e613084aa0517a660eab2412308e6e) to fix running the `test-security-check` target for the macOS build. It should pass inside Guix, as well as when cross-compiling on Ubuntu, or building natively on macOS.
    
      Note that the `test-security-check` may output some warnings (similar too):
      ```bash
      ld: warning: passed two min versions (10.14, 11.4) for platform macOS. Using 11.4.
      ld: warning: passed two min versions (10.14, 11.4) for platform macOS. Using 11.4.
      ld: warning: passed two min versions (10.14, 10.14) for platform macOS. Using 10.14.
      ```
      but those can be ignored, and come about due to us passing `-platform_version` when `-mmacosx-version-min` is already part of `CC`.
    
      Guix builds:
      ```bash
      71ed0c7a13a4726300779ffc87f7d271086a2744c36896fe6dc51fe3dc33df2e  guix-build-5b4703c6a70d/output/aarch64-linux-gnu/SHA256SUMS.part
      9273980a17052c8ec45b77579781c14ab5d189fa25aa29907d5115513dd302b1  guix-build-5b4703c6a70d/output/aarch64-linux-gnu/bitcoin-5b4703c6a70d-aarch64-linux-gnu-debug.tar.gz
      9c042179af43c8896eb95a34294df15d4910308dcdba40b2010cd36e192938b8  guix-build-5b4703c6a70d/output/aarch64-linux-gnu/bitcoin-5b4703c6a70d-aarch64-linux-gnu.tar.gz
      1ceddecac113f50a952ba6a201cdcdb722e3dc804e663f219bfac8268ce42bf0  guix-build-5b4703c6a70d/output/arm-linux-gnueabihf/SHA256SUMS.part
      759597c4e925e75db4a2381c06cda9b9f4e4674c23436148676b31c9be05c7aa  guix-build-5b4703c6a70d/output/arm-linux-gnueabihf/bitcoin-5b4703c6a70d-arm-linux-gnueabihf-debug.tar.gz
      34e3b6beabaf8c95d7c2ca0d2c3ac4411766694ef43e00bd9783badbbaf045a7  guix-build-5b4703c6a70d/output/arm-linux-gnueabihf/bitcoin-5b4703c6a70d-arm-linux-gnueabihf.tar.gz
      e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  guix-build-5b4703c6a70d/output/dist-archive/SKIPATTEST.TAG
      3664f6ceee7898caa374281fd877a7597fe491fa2e9f0c174c28d889d60b559c  guix-build-5b4703c6a70d/output/dist-archive/bitcoin-5b4703c6a70d.tar.gz
      d6bc35ba0750c1440bb32831b8c12cddee62f6dce10fec2650897444c2bf4748  guix-build-5b4703c6a70d/output/powerpc64-linux-gnu/SHA256SUMS.part
      a836edf6474ba0c16c19bb217549bac7936c1b44306ed512df58f607ee5568f2  guix-build-5b4703c6a70d/output/powerpc64-linux-gnu/bitcoin-5b4703c6a70d-powerpc64-linux-gnu-debug.tar.gz
      7cc91c6805d5069ca3bd1771e77d95f83eb184b137198cbf84d1d11d0a5c5afe  guix-build-5b4703c6a70d/output/powerpc64-linux-gnu/bitcoin-5b4703c6a70d-powerpc64-linux-gnu.tar.gz
      93b4cb7b83c4975120ad5de5a92f050f5760a2a3f2c37c204c647f5a581c924a  guix-build-5b4703c6a70d/output/powerpc64le-linux-gnu/SHA256SUMS.part
      2266e2c5d0dafa28c6c057ccfc1c439baeab1d714d8c3f64a83015d2827116d2  guix-build-5b4703c6a70d/output/powerpc64le-linux-gnu/bitcoin-5b4703c6a70d-powerpc64le-linux-gnu-debug.tar.gz
      85f41f42c319b83d049d6fd2e2278c07b40a1e28a2eac596427822c0eef9dc3f  guix-build-5b4703c6a70d/output/powerpc64le-linux-gnu/bitcoin-5b4703c6a70d-powerpc64le-linux-gnu.tar.gz
      1499ca9119926083d8c3714ca10d8d4c8d864cbeee8848fd8445b7a1d081222d  guix-build-5b4703c6a70d/output/riscv64-linux-gnu/SHA256SUMS.part
      1995fc1a2e45c49d4b0718aff5dcdac931917e8ae9e762fd23f1126abcecc248  guix-build-5b4703c6a70d/output/riscv64-linux-gnu/bitcoin-5b4703c6a70d-riscv64-linux-gnu-debug.tar.gz
      266889eb58429a470f0fd7bb123f2ae09b0aef86c47b0390938b3634a8f748a9  guix-build-5b4703c6a70d/output/riscv64-linux-gnu/bitcoin-5b4703c6a70d-riscv64-linux-gnu.tar.gz
      cdc3a0dcf80b110443dac5ddf8bc951001a776a651c898c5ea49bb2d487bfe29  guix-build-5b4703c6a70d/output/x86_64-apple-darwin18/SHA256SUMS.part
      8538d1eab96c97866b24546c453d95822f24cf9c6638b42ba523eb7aa441cb26  guix-build-5b4703c6a70d/output/x86_64-apple-darwin18/bitcoin-5b4703c6a70d-osx-unsigned.dmg
      d1b73133f1da68586b07292a8425f7f851e93f599c016376f23728c041cf39cc  guix-build-5b4703c6a70d/output/x86_64-apple-darwin18/bitcoin-5b4703c6a70d-osx-unsigned.tar.gz
      5ad94c5f8a5f29405955ff3ab35d137de1acc04398d6c8298fb187b57a6e316a  guix-build-5b4703c6a70d/output/x86_64-apple-darwin18/bitcoin-5b4703c6a70d-osx64.tar.gz
      8c6d7b3f847faa7b4d16ceecf228f26f146ea982615c1d7a00c57f9230a0c484  guix-build-5b4703c6a70d/output/x86_64-linux-gnu/SHA256SUMS.part
      d0a8c99750319ad8046cfa132a54e5c13a08351f94439ae9af0f8e5486c2c2ea  guix-build-5b4703c6a70d/output/x86_64-linux-gnu/bitcoin-5b4703c6a70d-x86_64-linux-gnu-debug.tar.gz
      d816bb26dd4b0e309f2f576b1cccc6d78743fb2f357daad2da09bb1177330971  guix-build-5b4703c6a70d/output/x86_64-linux-gnu/bitcoin-5b4703c6a70d-x86_64-linux-gnu.tar.gz
      65caaa7f648c7eab1eb82c3331a2ca25b8cd4fe41439de55604501e02571de55  guix-build-5b4703c6a70d/output/x86_64-w64-mingw32/SHA256SUMS.part
      5bf6f7328cbceb0db22a2d7babb07b60cb6dcc19a6db84a1698589b7f5173a06  guix-build-5b4703c6a70d/output/x86_64-w64-mingw32/bitcoin-5b4703c6a70d-win-unsigned.tar.gz
      7aabcb56115decef78d3797840b6e49dbc9b202d56f892490e92616fb06fec9e  guix-build-5b4703c6a70d/output/x86_64-w64-mingw32/bitcoin-5b4703c6a70d-win64-debug.zip
      2f369694648ff9dc5ca1261a1e5874b1c7408ccf2802f9caef56c1334e8a5b7c  guix-build-5b4703c6a70d/output/x86_64-w64-mingw32/bitcoin-5b4703c6a70d-win64-setup-unsigned.exe
      1c1f92513c4aad38419ff49a7b80bf10e6b1eca01ee8c5e3b2acd1768cf1e3d5  guix-build-5b4703c6a70d/output/x86_64-w64-mingw32/bitcoin-5b4703c6a70d-win64.zip
      ```
    
    ACKs for top commit:
      hebasto:
        Approach ACK 5b4703c6a70db2fa72fcace56a15db07d4b0acf1.
    
    Tree-SHA512: 2cd92a245ea64ef7176cf402a1fa5348a9421c30a4d30d01c950c48f6dcc15cf22ce69ffe1657be97e5fccc14bd933d64683c4439b695528ce3dc34d72dda927
    34d1d6a112
  208. Merge bitcoin/bitcoin#22176: test: Correct outstanding -Werror=sign-compare errors
    4e44f5bac4481d49ac53c458dcc5ca48e8b28414 test: Correct outstanding -Werror=sign-compare errors (Ben Woosley)
    
    Pull request description:
    
      I'm unclear on why these aren't failing on CI, but they failed for me locally, e.g.:
    
      ```
      In file included from /usr/local/include/boost/test/test_tools.hpp:46:
      /usr/local/include/boost/test/tools/old/impl.hpp:107:17: error: comparison of integers of different signs: 'const unsigned int' and 'const int' [-Werror,-Wsign-compare]
          return left == right;
                 ~~~~ ^  ~~~~~
      /usr/local/include/boost/test/tools/old/impl.hpp:130:16: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::equal_impl<unsigned int, int>' requested here
              return equal_impl( left, right );
                     ^
      /usr/local/include/boost/test/tools/old/impl.hpp:145:16: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::equal_impl_frwd::call_impl<unsigned int, int>' requested here
              return call_impl( left, right, left_is_array() );
                     ^
      /usr/local/include/boost/test/tools/old/impl.hpp:92:50: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::equal_impl_frwd::operator()<unsigned int, int>' requested here
      BOOST_PP_REPEAT( BOOST_TEST_MAX_PREDICATE_ARITY, IMPL_FRWD, _ )
                                                       ^
      /usr/local/include/boost/preprocessor/repetition/repeat.hpp:30:26: note: expanded from macro 'BOOST_PP_REPEAT'
                               ^
      /usr/local/include/boost/preprocessor/cat.hpp:22:32: note: expanded from macro 'BOOST_PP_CAT'
                                     ^
      /usr/local/include/boost/preprocessor/cat.hpp:29:34: note: expanded from macro 'BOOST_PP_CAT_I'
                                       ^
      <scratch space>:153:1: note: expanded from here
      BOOST_PP_REPEAT_1
      ^
      test/streams_tests.cpp:122:5: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::check_frwd<boost::test_tools::tt_detail::equal_impl_frwd, unsigned int, int>' requested here
          BOOST_CHECK_EQUAL(varint, 54321);
          ^
    
      /usr/local/include/boost/test/tools/old/impl.hpp:107:17: error: comparison of integers of different signs: 'const unsigned long long' and 'const long' [-Werror,-Wsign-compare]
          return left == right;
                 ~~~~ ^  ~~~~~
      /usr/local/include/boost/test/tools/old/impl.hpp:130:16: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::equal_impl<unsigned long long, long>' requested here
              return equal_impl( left, right );
                     ^
      /usr/local/include/boost/test/tools/old/impl.hpp:145:16: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::equal_impl_frwd::call_impl<unsigned long long, long>' requested here
              return call_impl( left, right, left_is_array() );
                     ^
      /usr/local/include/boost/test/tools/old/impl.hpp:92:50: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::equal_impl_frwd::operator()<unsigned long long, long>' requested here
      BOOST_PP_REPEAT( BOOST_TEST_MAX_PREDICATE_ARITY, IMPL_FRWD, _ )
                                                       ^
      /usr/local/include/boost/preprocessor/repetition/repeat.hpp:30:26: note: expanded from macro 'BOOST_PP_REPEAT'
                               ^
      /usr/local/include/boost/preprocessor/cat.hpp:22:32: note: expanded from macro 'BOOST_PP_CAT'
                                     ^
      /usr/local/include/boost/preprocessor/cat.hpp:29:34: note: expanded from macro 'BOOST_PP_CAT_I'
                                       ^
      <scratch space>:161:1: note: expanded from here
      BOOST_PP_REPEAT_1
      ^
      test/serfloat_tests.cpp:41:5: note: in instantiation of function template specialization 'boost::test_tools::tt_detail::check_frwd<boost::test_tools::tt_detail::equal_impl_frwd, unsigned long long, long>' requested here
          BOOST_CHECK_EQUAL(TestDouble(std::numeric_limits<double>::infinity()), 0x7ff0000000000000);
          ^
    
    ACKs for top commit:
      theStack:
        ACK 4e44f5bac4481d49ac53c458dcc5ca48e8b28414
    
    Tree-SHA512: 8d9e5245676c61207ceacdf78c78a78ccc9fd2a2551d4d8df023513795591334aa2f5e1f4a2a8ed2bfeb381f1e226b6ba84c07e0de29a1f3f00da71f3a257bc1
    efff9c3494
  209. Merge bitcoin/bitcoin#22363: test: refactor: use `script_util` helpers for creating P2{PKH,SH,WPKH,WSH} scripts
    905d672b743edf31531d095ffe800449eaffec69 test: use script_util helpers for creating P2W{PKH,SH} scripts (Sebastian Falbesoner)
    285a65ccfde2e811cfe01e916b998c02ee534a97 test: use script_util helpers for creating P2SH scripts (Sebastian Falbesoner)
    b57b633b942da162045b1fe7743a8abdfeaf60e2 test: use script_util helpers for creating P2PKH scripts (Sebastian Falbesoner)
    61b6a017a9f99ef072b2d1980dd547eb20093352 test: wallet util: fix multisig P2SH-P2WSH script creation (Sebastian Falbesoner)
    
    Pull request description:
    
      PR #18788 (commit 08067aebfd7e838e6ce6b030c31a69422260fc6f) introduced functions to generate output scripts for various types. This PR replaces all manual CScript creations in the P2PKH, P2SH, P2WPKH, P2WSH formats with those helpers in order to increase readability and maintainability over the functional test codebase. The first commit fixes a bug in the wallet_util helper module w.r.t. to P2SH-P2WSH script creation (the result is not used in any test so far, hence it can still be seen as refactoring).
    
      The following table shows a summary of the output script patterns tackled in this PR:
    
      | Type | master branch  | PR branch |
      | ---------- | ------------- | ------------- |
      | P2PKH | `CScript([OP_DUP, OP_HASH160, hash160(key), OP_EQUALVERIFY, OP_CHECKSIG])` | `key_to_p2pkh_script(key)`  |
      |             | `CScript([OP_DUP, OP_HASH160, keyhash, OP_EQUALVERIFY, OP_CHECKSIG])` | `keyhash_to_p2pkh_script(keyhash)` |
      | P2SH  | `CScript([OP_HASH160, hash160(script), OP_EQUAL])`  | `script_to_p2sh_script(script)` |
      | P2WPKH | `CScript([OP_0, hash160(key)])` | `key_to_p2wpkh_script(key)` |
      | P2WSH | `CScript([OP_0, sha256(script)])` | `script_to_p2wsh_script(script)` |
    
      Note that the `key_to_...` helpers can't be used if an invalid key size (not 33 or 65 bytes) is passed, which is the case in some rare instances where the scripts still have to be created manually.
    
      Possible follow-up ideas:
      * further simplify by identifying P2SH-wrapped scripts and using `key_to_p2sh_p2wpkh_script()` and `script_to_p2sh_p2wsh_script()` helpers
      * introduce and use `key_to_p2pk_script()` helper for P2PK scripts
    
    ACKs for top commit:
      rajarshimaitra:
        tACK https://github.com/bitcoin/bitcoin/pull/22363/commits/905d672b743edf31531d095ffe800449eaffec69
      LarryRuane:
        tACK 905d672b743edf31531d095ffe800449eaffec69
      0xB10C:
        ACK 905d672b743edf31531d095ffe800449eaffec69
      MarcoFalke:
        review ACK 905d672b743edf31531d095ffe800449eaffec69 🕹
    
    Tree-SHA512: 7ccfe69699bc81168ac122b03536720013355c1b2fbb088355b616015318644c4d1cd27e20c4f56c89ad083ae609add4bc838cf6316794d0edb0ce9cf7fa0fd8
    d1e4c56309
  210. net: change assumed I2P port to 0
    * When accepting an I2P connection, assume the peer has port 0 instead
      of the default 8333 (for mainnet). It is not being sent to us, so we
      must assume something.
    * When deriving our own I2P listen CService use port 0 instead of the
      default 8333 (for mainnet). So that we later advertise it to peers
      with port 0.
    
    In the I2P protocol SAM 3.1 and older (we use 3.1) ports are not used,
    so they are irrelevant. However in SAM 3.2 and newer ports are used and
    from the point of view of SAM 3.2, a peer using SAM 3.1 seems to have
    specified port=0.
    38f900290c
  211. net: change I2P seeds' ports to 0 aeac3bce3e
  212. net: distinguish default port per network
    Change `CChainParams::GetDefaultPort()` to return 0 if the network is
    I2P.
    1f096f091e
  213. net: do not connect to I2P hosts on port!=0
    When connecting to an I2P host we don't specify destination port and it
    is being forced to 0 by the SAM 3.1 proxy, so if we connect to the same
    host on two different ports, that would be actually two connections to
    the same service (listening on port 0).
    
    Fixes https://github.com/bitcoin/bitcoin/issues/21389
    4f432bd738
  214. test: ensure I2P ports are handled as expected 41cda9d075
  215. addrman: reset I2P ports to 0 when loading from disk
    This is a temporary change to convert I2P addresses that have propagated
    with port 8333 to ones with port 0.
    
    It would cause a problem some day if indeed some bitcoin software is
    listening on port 8333 only and rejects connections to port 0 and we are
    still using SAM 3.1 which only supports port 0. In this case we would
    replace 8333 with 0 and try to connect to such nodes.
    
    This commit should be included in 22.0 and be reverted before 23.0 is
    released.
    e0a2b390c1
  216. doc: mention that we enforce port=0 in I2P
    Co-authored-by: Jon Atack <jon@atack.com>
    4101ec9d2e
  217. Merge bitcoin/bitcoin#22253: validation: distinguish between same tx and same-nonwitness-data tx in mempool
    b7a8cd9963e810264d3b45d0ad15af863965c47a [test] submit same txid different wtxid as mempool tx (glozow)
    fdb48163bfbf34f79dc78ffaa2bbf9e39af96687 [validation] distinguish same txid different wtxid in mempool (glozow)
    
    Pull request description:
    
      On master, if you submit a transaction with the same txid but different witness to the mempool, it thinks the transactions are the same. Users submitting through `BroadcastTransaction()` (i.e. `sendrawtransaction` or the wallet) don't get notified that there's a different transaction in the mempool, although it doesn't crash. Users submitting through `testmempoolaccept()` will get a "txn-already-in-mempool" error.
    
      This PR simply distinguishes between `txn-already-in-mempool` and `txn-same-nonwitness-data-in-mempool`, without handling them differently: `sendrawtransaction` still will not throw, but `testmempoolaccept` will give you a different error.
    
      I believe the intention of #19645 is to allow full swaps of transactions that have different witnesses but identical nonwitness data. Returning a different error message + adding a test was suggested: https://github.com/bitcoin/bitcoin/pull/19645#issuecomment-705109193 so this is that PR.
    
    ACKs for top commit:
      naumenkogs:
        ACK b7a8cd9963e810264d3b45d0ad15af863965c47a
      jnewbery:
        Code review ACK b7a8cd9963e810264d3b45d0ad15af863965c47a
      theStack:
        Code-review ACK b7a8cd9963e810264d3b45d0ad15af863965c47a
      darosior:
        re-utACK b7a8cd9963e810264d3b45d0ad15af863965c47a
    
    Tree-SHA512: 9c6591edaf8727ba5b4675977adb8cbdef7288584003b6cd659828032dc92d2ae915800a8ef8b6fdffe112c1b660df72297a3dcf2e2e3e1f959c6cb3678c63ee
    8ab0c77299
  218. Merge bitcoin/bitcoin#22335: doc: recommend `--disable-external-signer` in OpenBSD build guide
    e65d1d49864d047764eb2b444b2fc806b67e051c doc: recommend `--disable-external-signer` in OpenBSD build guide (Sebastian Falbesoner)
    
    Pull request description:
    
      Building the master branch with the default build settings (i.e. with external signer support enabled) leads to the following errors on my OpenBSD 6.9 machine:
    
      ```
      In file included from util/system.cpp:9:
      In file included from /usr/local/include/boost/process.hpp:25:
      In file included from /usr/local/include/boost/process/group.hpp:32:
      /usr/local/include/boost/process/detail/posix/wait_group.hpp:38:17: error: no member named 'waitid' in the global namespace
              ret = ::waitid(P_PGID, p.grp, &status, WEXITED | WNOHANG);
                    ~~^
      /usr/local/include/boost/process/detail/posix/wait_group.hpp:38:24: error: use of undeclared identifier 'P_PGID'
              ret = ::waitid(P_PGID, p.grp, &status, WEXITED | WNOHANG);
                             ^
      /usr/local/include/boost/process/detail/posix/wait_group.hpp:38:48: error: use of undeclared identifier 'WEXITED'
              ret = ::waitid(P_PGID, p.grp, &status, WEXITED | WNOHANG);
                                                     ^
      /usr/local/include/boost/process/detail/posix/wait_group.hpp:144:17: error: no member named 'waitid' in the global namespace
              ret = ::waitid(P_PGID, p.grp, &siginfo, WEXITED | WSTOPPED | WNOHANG);
                    ~~^
      /usr/local/include/boost/process/detail/posix/wait_group.hpp:144:24: error: use of undeclared identifier 'P_PGID'
              ret = ::waitid(P_PGID, p.grp, &siginfo, WEXITED | WSTOPPED | WNOHANG);
                             ^
      /usr/local/include/boost/process/detail/posix/wait_group.hpp:144:49: error: use of undeclared identifier 'WEXITED'
              ret = ::waitid(P_PGID, p.grp, &siginfo, WEXITED | WSTOPPED | WNOHANG);
                                                      ^
      /usr/local/include/boost/process/detail/posix/wait_group.hpp:144:59: error: use of undeclared identifier 'WSTOPPED'
              ret = ::waitid(P_PGID, p.grp, &siginfo, WEXITED | WSTOPPED | WNOHANG);
                                                                ^
      7 errors generated.
      ```
    
      This PR recommends passing `--disable-external-signer` in the OpenBSD build guide ([as suggested by laanwj](https://github.com/bitcoin/bitcoin/pull/22294#issuecomment-867452411)). The same commit also bumps the OpenBSD version mentioned in the header to 6.9 -- I recently used this document to setup a Bitcoin Core build on 6.9 and the description and all mentioned versions were still valid (before external signer support was enabled by default).
    
      Would be nice if another OpenBSD user could confirm the build error.
    
    ACKs for top commit:
      laanwj:
        ACK e65d1d49864d047764eb2b444b2fc806b67e051c
    
    Tree-SHA512: c3ae7eca29cf42b4b52024477e1c3fb7242bbf9d809bc95f8fa08b2f9bf4bcfd4f22457d58569a208ac1d8e5fe41b270addd13d85a5bba0521a0f9e325288448
    e0fe658b86
  219. Merge bitcoin/bitcoin#20234: net: don't bind on 0.0.0.0 if binds are restricted to Tor
    2feec3ce3130961f98ceb030951d0e46d3b9096c net: don't bind on 0.0.0.0 if binds are restricted to Tor (Vasil Dimov)
    
    Pull request description:
    
      The semantic of `-bind` is to restrict the binding only to some address.
      If not specified, then the user does not care and we bind to `0.0.0.0`.
      If specified then we should honor the restriction and bind only to the
      specified address.
    
      Before this change, if no `-bind` is given then we would bind to
      `0.0.0.0:8333` and to `127.0.0.1:8334` (incoming Tor) which is ok -
      the user does not care to restrict the binding.
    
      However, if only `-bind=addr:port=onion` is given (without ordinary
      `-bind=`) then we would bind to `addr:port` _and_ to `0.0.0.0:8333` in
      addition.
    
      Change the above to not do the additional bind: if only
      `-bind=addr:port=onion` is given (without ordinary `-bind=`) then bind
      to `addr:port` (only) and consider incoming connections to that as Tor
      and do not advertise it. I.e. a Tor-only node.
    
    ACKs for top commit:
      laanwj:
        Code review ACK 2feec3ce3130961f98ceb030951d0e46d3b9096c
      jonatack:
        utACK 2feec3ce3130961f98ceb030951d0e46d3b9096c per `git diff a004833 2feec3c`
      hebasto:
        ACK 2feec3ce3130961f98ceb030951d0e46d3b9096c, tested on Linux Mint 20.1 (x86_64):
    
    Tree-SHA512: a04483af601706da928958b92dc560f9cfcc78ab0bb9d74414636eed1c6f29ed538ce1fb5a17d41ed82c9c9a45ca94899d0966e7ef93da809c9bcdcdb1d1f040
    842e2a9c54
  220. fix incorrect testmempoolaccept doc 9169be09f4
  221. Merge bitcoin/bitcoin#22432: doc: fix incorrect testmempoolaccept doc
    9169be09f49c82fece034285e92f8ffa41e19ee2 fix incorrect testmempoolaccept doc (glozow)
    
    Pull request description:
    
      Sorry, I somehow missed this...
    
    ACKs for top commit:
      jnewbery:
        Tested ACK 9169be09f49c82fece034285e92f8ffa41e19ee2
    
    Tree-SHA512: d44f81655669e338af298b7b5d616eb4ca15cbaac667c49251408cb92cee2fb9f440fcfbbac6a17744f24ceeafaf6cea6b9c49a37a464f7eaeeda6e655a56f7a
    839f5d06d6
  222. init: remove straggling boost thread_group code
    boost::thread_group usage was removed in #21016.
    aa72ffb1c2
  223. Merge bitcoin/bitcoin#22433: init: remove straggling boost thread_group related code
    aa72ffb1c297177dfb79acf69729666a2ef50c5e init: remove straggling boost thread_group code (fanquake)
    
    Pull request description:
    
      `boost::thread_group` was removed in #21016.
    
    ACKs for top commit:
      MarcoFalke:
        review ACK aa72ffb1c297177dfb79acf69729666a2ef50c5e
    
    Tree-SHA512: c7ac3c2cde38fb752e0103d563b506732a403aad765a5db6be8d82399df3783044a77b071cc9c71aec3824397b04611894cf115576e63e8ee714eacf62729ab9
    7e1ba37b5d
  224. Merge bitcoin/bitcoin#22112: Force port 0 in I2P
    4101ec9d2e05a35c35f587a28f1feee6cebcc61b doc: mention that we enforce port=0 in I2P (Vasil Dimov)
    e0a2b390c144e123e2fc8a289fdff36815476964 addrman: reset I2P ports to 0 when loading from disk (Vasil Dimov)
    41cda9d075ebcab1dbb950160ebe9d0ba7b5745e test: ensure I2P ports are handled as expected (Vasil Dimov)
    4f432bd738c420512a86a51ab3e00323f396b89e net: do not connect to I2P hosts on port!=0 (Vasil Dimov)
    1f096f091ebd88efb18154b8894a38122c39624f net: distinguish default port per network (Vasil Dimov)
    aeac3bce3ead1f24ca782079ef0defa86fd8cb98 net: change I2P seeds' ports to 0 (Vasil Dimov)
    38f900290cc3a839e99bef13474d35e1c02e6b0d net: change assumed I2P port to 0 (Vasil Dimov)
    
    Pull request description:
    
      _This is an alternative to https://github.com/bitcoin/bitcoin/pull/21514, inspired by https://github.com/bitcoin/bitcoin/pull/21514#issuecomment-815049933. They are mutually exclusive. Just one of them should be merged._
    
      Change assumed ports for I2P to 0 (instead of the default 8333) as this is closer to what actually happens underneath with SAM 3.1 (https://github.com/bitcoin/bitcoin/pull/21514#issuecomment-812632520, https://github.com/bitcoin/bitcoin/pull/21514#issuecomment-816564719).
    
      Don't connect to I2P peers with advertised port != 0 (we don't specify a port to our SAM 3.1 proxy and it always connects to port = 0).
    
      Note, this change:
      * Keeps I2P addresses with port != 0 in addrman and relays them to others via P2P gossip. There may be non-bitcoin-core-22.0 peers using SAM 3.2 and for them such addresses may be useful.
      * Silently refuses to connect to I2P hosts with port != 0. This is ok for automatically chosen peers from addrman. Not so ok for peers provided via `-addnode` or `-connect` - a user who specifies `foo.b32.i2p:1234` (non zero port) may wonder why "nothing is happening".
    
      Fixes #21389
    
    ACKs for top commit:
      laanwj:
        Code review ACK 4101ec9d2e05a35c35f587a28f1feee6cebcc61b
      jonatack:
        re-ACK 4101ec9d2e05a35c35f587a28f1feee6cebcc61b per `git range-diff efff9c3 0b0ee03 4101ec9`, built with DDEBUG_ADDRMAN, did fairly extensive testing on mainnet both with and without a peers.dat / -dnsseeds=0 to test boostrapping.
    
    Tree-SHA512: 0e3c019e1dc05e54f559275859d3450e0c735596d179e30b66811aad9d5b5fabe3dcc44571e8f7b99f9fe16453eee393d6e153454dd873b9ff14907d4e6354fe
    d8f1e1327f
  225. validation: make CChainState::m_mempool optional
    Since we now have multiple chainstate objects, only one of them is active at any given
    time. An active chainstate has a mempool, but there's no point to others having one.
    
    This change will simplify proposed assumeutxo semantics. See the discussion here:
    https://github.com/bitcoin/bitcoin/pull/15606#pullrequestreview-692965905
    
    Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
    617661703a
  226. refactor: move UpdateMempoolForReorg into CChainState
    Allows fewer arguments and simplification of call sites.
    
    Co-authored-by: John Newbery <john@johnnewbery.com>
    46e3efd1e4
  227. refactor: no mempool arg to GetCoinsCacheSizeState
    Unnecessary argument since we can make use of this->m_mempool
    
    Co-authored-by: John Newbery <john@johnnewbery.com>
    4abf0779d6
  228. refactor: move UpdateTip into CChainState
    Makes sense and saves on arguments.
    
    Co-authored-by: John Newbery <john@johnnewbery.com>
    ceb7b35a39
  229. Merge bitcoin/bitcoin#20354: test: Add feature_taproot.py --previous_release
    fa80e10d94dbf86da84fc761b09fb631155a5b25 test: Add feature_taproot.py --previous_release (MarcoFalke)
    85ccffa26686c6c9adbd18bdde37fc1747281bab test: move releases download incantation to README (Sjors Provoost)
    29d6b1da2a862bfbb14e7821979c97416c5400e8 test: previous releases: add v0.20.1 (Sjors Provoost)
    
    Pull request description:
    
      Disabling the new consensus code at runtime is fine, but potentially fragile and incomplete. Fix that by giving the option to run with a version that has been compiled without any taproot code.
    
    ACKs for top commit:
      Sjors:
        tACK fa80e10
      NelsonGaldeman:
        tACK fa80e10d94dbf86da84fc761b09fb631155a5b25
    
    Tree-SHA512: 1a1feef823f08c05268759645a8974e1b2d39a024258f5e6acecbe25097aae3fa9302c27262978b40f1aa8e7b525b60c0047199010f2a5d6017dd6434b4066f0
    531c2b7c04
  230. Move implementations of non-template fuzz helpers
    Moved implementations of `ConsumeTxMemPoolEntry`, `ContainsSpentInput`, `ConsumeNetAddr`, and the methods(open, read, write, seek, close) of FuzzedFileProvider from test/fuzz/util.h to test/fuzz/util.cpp.
    a2aca207b1
  231. test: Fix wallet_listdescriptors.py if bdb is not compiled 0c845e3f89
  232. test: whitelist rpc_rawtransaction peers to speed up tests
    in my testing from 45-55 seconds to 15.
    5a1ed96077
  233. test: move rpc_rawtransaction tests to < 30s group a3d6ec5bb5
  234. Merge bitcoin/bitcoin#22446: test: Fix wallet_listdescriptors.py if bdb is not compiled
    0c845e3f8995eb8dc543a63899e5633a46091b4e test: Fix wallet_listdescriptors.py if bdb is not compiled (Hennadii Stepanov)
    
    Pull request description:
    
      If build system is configured `--without-bdb`, the `wallet_listdescriptors.py` fails:
      ```
      $ test/functional/wallet_listdescriptors.py --descriptors
      2021-07-14T13:20:52.931000Z TestFramework (INFO): Initializing test directory /tmp/bitcoin_func_test_02p7o1c9
      2021-07-14T13:21:23.377000Z TestFramework (INFO): Test that the command is not available for legacy wallets.
      2021-07-14T13:21:23.381000Z TestFramework (ERROR): JSONRPC error
      Traceback (most recent call last):
        File "/home/hebasto/GitHub/bitcoin/test/functional/test_framework/test_framework.py", line 128, in main
          self.run_test()
        File "test/functional/wallet_listdescriptors.py", line 34, in run_test
          node.createwallet(wallet_name='w1', descriptors=False)
        File "/home/hebasto/GitHub/bitcoin/test/functional/test_framework/test_node.py", line 685, in createwallet
          return self.__getattr__('createwallet')(wallet_name, disable_private_keys, blank, passphrase, avoid_reuse, descriptors, load_on_startup, external_signer)
        File "/home/hebasto/GitHub/bitcoin/test/functional/test_framework/coverage.py", line 47, in __call__
          return_val = self.auth_service_proxy_instance.__call__(*args, **kwargs)
        File "/home/hebasto/GitHub/bitcoin/test/functional/test_framework/authproxy.py", line 146, in __call__
          raise JSONRPCException(response['error'], status)
      test_framework.authproxy.JSONRPCException: Compiled without bdb support (required for legacy wallets) (-4)
      2021-07-14T13:21:23.436000Z TestFramework (INFO): Stopping nodes
      2021-07-14T13:21:24.092000Z TestFramework (WARNING): Not cleaning up dir /tmp/bitcoin_func_test_02p7o1c9
      2021-07-14T13:21:24.092000Z TestFramework (ERROR): Test failed. Test logging available at /tmp/bitcoin_func_test_02p7o1c9/test_framework.log
      2021-07-14T13:21:24.092000Z TestFramework (ERROR):
      2021-07-14T13:21:24.092000Z TestFramework (ERROR): Hint: Call /home/hebasto/GitHub/bitcoin/test/functional/combine_logs.py '/tmp/bitcoin_func_test_02p7o1c9' to consolidate all logs
      2021-07-14T13:21:24.092000Z TestFramework (ERROR):
      2021-07-14T13:21:24.092000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
      2021-07-14T13:21:24.092000Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
      2021-07-14T13:21:24.092000Z TestFramework (ERROR):
      ```
    
      This PR fixes this issue.
    
      Also see #20267.
    
    ACKs for top commit:
      achow101:
        ACK 0c845e3f8995eb8dc543a63899e5633a46091b4e
    
    Tree-SHA512: d7116a9ae30c7b7e3f55f55d2eea66f9e293c38d6757ed66d0477e4256ff5fedca5ddedafa0ef0c09f4dc1f7f973163e5a46090da26b067fdddbd9ea2ee76633
    fdf9b3eba3
  235. Merge bitcoin/bitcoin#22447: test: whitelist rpc_rawtransaction peers to speed up tests
    a3d6ec5bb567481a634638cea7ae37c355119a7b test: move rpc_rawtransaction tests to < 30s group (Jon Atack)
    5a1ed96077852c739034c21d399da65db09e7714 test: whitelist rpc_rawtransaction peers to speed up tests (Jon Atack)
    
    Pull request description:
    
      Speed up the somewhat slow `rpc_rawtransaction.py` test by more than 3x (from 45-55 seconds to 15 seconds on a laptop running 2 x 2.5GHz).
    
    ACKs for top commit:
      mjdietzx:
        ACK a3d6ec5bb567481a634638cea7ae37c355119a7b
      kristapsk:
        ACK a3d6ec5bb567481a634638cea7ae37c355119a7b
      theStack:
        ACK a3d6ec5bb567481a634638cea7ae37c355119a7b 🐎
      brunoerg:
        tACK a3d6ec5bb567481a634638cea7ae37c355119a7b
    
    Tree-SHA512: f1d105594c9b5b257a7096b631a6fa5aeb50e330a351f75c2d6ffa7dd73abdb6e1f596a78c16d204a9bac3fe506e0519f9ad96bb8477ab6424c8e18125ccb659
    e2c4ac7cfb
  236. Merge bitcoin/bitcoin#22385: refactor: Use DeploymentEnabled to hide VB deployments
    fa5658ed077bfb02b6281d642dc649abdb99b6ee Use DeploymentEnabled to hide VB deployments (MarcoFalke)
    fa11fecf0dac44846a08e1b325547641f2eca957 doc: Move buried deployment doc to the enum that enumerates them (MarcoFalke)
    
    Pull request description:
    
      Plus a doc commit.
    
    ACKs for top commit:
      jnewbery:
        utACK fa5658ed077bfb02b6281d642dc649abdb99b6ee
      ajtowns:
        utACK fa5658ed077bfb02b6281d642dc649abdb99b6ee
    
    Tree-SHA512: 2aeceee0674feb603d76656eff40695b7d7305de309f837bbb6a8c1dbb1d0b962b741f06ab7b9a8b1dbd1964c9c0c9aa5dc9588fd8e6d896e620b69e08eedbaa
    97153a7026
  237. Merge bitcoin/bitcoin#22415: Make m_mempool optional in CChainState
    ceb7b35a39145717e2d9d356fd382bd1f95d2a5a refactor: move UpdateTip into CChainState (James O'Beirne)
    4abf0779d6594e97222279110c328b75b5f3db7b refactor: no mempool arg to GetCoinsCacheSizeState (James O'Beirne)
    46e3efd1e4ae2f058ecfffdaee7e882c4305eb35 refactor: move UpdateMempoolForReorg into CChainState (James O'Beirne)
    617661703ac29e0744f21de74501d033fdc53ff6 validation: make CChainState::m_mempool optional (James O'Beirne)
    
    Pull request description:
    
      Make `CChainState::m_mempool` optional by making it a pointer instead of a reference. This will allow a simplification to assumeutxo semantics (see https://github.com/bitcoin/bitcoin/pull/15606#pullrequestreview-692965905) and help facilitate the `-nomempool` option.
    
    ACKs for top commit:
      jnewbery:
        ACK ceb7b35a39145717e2d9d356fd382bd1f95d2a5a
      naumenkogs:
        ACK ceb7b35a39145717e2d9d356fd382bd1f95d2a5a
      ryanofsky:
        Code review ACK ceb7b35a39145717e2d9d356fd382bd1f95d2a5a (just minor style and test tweaks since last review)
      lsilva01:
        Code review ACK and tested on Signet ACK https://github.com/bitcoin/bitcoin/pull/22415/commits/ceb7b35a39145717e2d9d356fd382bd1f95d2a5a
      MarcoFalke:
        review ACK ceb7b35a39145717e2d9d356fd382bd1f95d2a5a 😌
    
    Tree-SHA512: cc445ad33439d5918cacf80a6354eea8f3d33bb7719573ed5b970fad1a0dab410bcd70be44c862b8aba1b71263b82d79876688c553e339362653dfb3d8ec81e6
    c0224bc962
  238. Merge bitcoin/bitcoin#22284: p2p, refactor: performance improvements to ProtectEvictionCandidatesByRatio()
    b1d905c225e87a4a289c0cd3593c6c21cea3fba7 p2p: earlier continuation when no remaining eviction candidates (Vasil Dimov)
    c9e8d8f9b168dec2bc7b845da38449e96708cf8e p2p: process more candidates per protection iteration (Jon Atack)
    02e411ec456af80d1da76085a814c68bb3aca6de p2p: iterate eviction protection only on networks having candidates (Jon Atack)
    5adb06457403f8c1d874e9c6748ecbb78ef8fa2b bench: add peer eviction protection benchmarks (Jon Atack)
    566357f8f7471f74729297868917aa32f6d3c390 refactor: move GetRandomNodeEvictionCandidates() to test utilities (Jon Atack)
    
    Pull request description:
    
      This follow-up to #21261 improves `ProtectEvictionCandidatesByRatio()` for better performance.
    
      Benchmarks are added; the performance improvement is between 2x and 5x for the benchmarked cases (CPU 2.50GHz, Turbo off, performance mode, Debian Clang 11 non-debug build).
    
      ```
      $ ./src/bench/bench_bitcoin -filter="EvictionProtection*.*"
      ```
    
      The refactored code is well-covered by existing unit tests and also a fuzzer.
    
      - `$ ./src/test/test_bitcoin -t net_peer_eviction_tests`
      - `$ FUZZ=node_eviction ./src/test/fuzz/fuzz ../qa-assets/fuzz_seed_corpus/node_eviction`
    
    ACKs for top commit:
      klementtan:
        Tested and code review ACK b1d905c2.
      vasild:
        ACK b1d905c225e87a4a289c0cd3593c6c21cea3fba7
      jarolrod:
        ACK b1d905c225e87a4a289c0cd3593c6c21cea3fba7
    
    Tree-SHA512: a3a6607b9ea2fec138da9780c03f63e177b6712091c5a3ddc3804b896a7585216446310280791f5e20cc023d02d2f03a4139237e12b5c1d7f2a1fa1011610e96
    21998bc028
  239. Merge bitcoin/bitcoin#22369: doc: Add steps for Transifex to release process
    a16378e501199144b5aecda57d8bfbc014546764 doc: Remove unnecessary steps from translations update process (Wladimir J. van der Laan)
    258492982386dac174461f641965c8d78fa6f1ce doc: Add steps for transifex to release process (Wladimir J. van der Laan)
    
    Pull request description:
    
      Document how to update settings on and for the transifex website before and after branch-off of a new release.
    
      (This is #21440, updated with the review feedback.)
    
    ACKs for top commit:
      laanwj:
        ACK a16378e501199144b5aecda57d8bfbc014546764
      hebasto:
        ACK a16378e501199144b5aecda57d8bfbc014546764
    
    Tree-SHA512: 9669cc3bc7ba056f913ee77c2ef9d9ee2313da947fc07f8cd955807c34c5d39e3af73587adfe734274ab2412a7dfb1e2dfe7ee4904ca28cfef9bf8061d26a573
    d86e6625e8
  240. Merge bitcoin/bitcoin#22393: doc: added info to bitcoin.conf doc
    fa84caebc7b647d9483262b6634bfe6b02b90a69 doc: added info to bitcoin.conf doc (Brian Liotti)
    
    Pull request description:
    
      Should probably be explicitly stated to not make modifications to the conf file while daemon is running. ref #11586
    
      For example, if rpc credentials are modified while bitcoind is running, `bitcoin-cli stop` is unable to stop bitcoind until the original credentials are restored in `bitcoin.conf`
    
    ACKs for top commit:
      rajarshimaitra:
        ACK https://github.com/bitcoin/bitcoin/pull/22393/commits/fa84caebc7b647d9483262b6634bfe6b02b90a69
      Zero-1729:
        ACK fa84caebc7b647d9483262b6634bfe6b02b90a69
      theStack:
        ACK fa84caebc7b647d9483262b6634bfe6b02b90a69 🗄️
    
    Tree-SHA512: f6ddffc25563c0b01e661b6abe43a7909938ad8eca38d6d0e2d4a2ce9fb850e51b54d950ef3118b74b6e340c64fe3f37205861720a2de2933db29782234869bb
    853ac47705
  241. Merge bitcoin/bitcoin#22211: net: relay I2P addresses even if not reachable (by us)
    7593b06bd1262f438bf34769ecc00e9c22328e56 test: ensure I2P addresses are relayed (Vasil Dimov)
    e7468139a1dddd4946bc70697ec38816b3fa8f9b test: make CAddress in functional tests comparable (Vasil Dimov)
    33e211d2a442e4555ff3401f92af4ee2f7552568 test: implement ser/unser of I2P addresses in functional tests (Vasil Dimov)
    86742811ce3662789ac85334008090a3b54babe3 test: use NODE_* constants instead of magic numbers (Vasil Dimov)
    ba45f0270815d54ae3290efc16324c2ff1984565 net: relay I2P addresses even if not reachable (by us) (Vasil Dimov)
    
    Pull request description:
    
      Nodes that can reach the I2P network (have set `-i2psam=`) will relay
      I2P addresses even without this patch. However, nodes that can't reach
      the I2P network will not. This was done as a precaution in
      https://github.com/bitcoin/bitcoin/pull/20119 before anybody could
      connect to I2P because then, for sure, it would have been useless.
    
      Now, however, we have I2P support and a bunch of I2P nodes, so get all
      nodes on the network to relay I2P addresses to help with propagation,
      similarly to what we do with Tor addresses.
    
    ACKs for top commit:
      jonatack:
        ACK 7593b06bd1262f438bf34769ecc00e9c22328e56
      naumenkogs:
        ACK 7593b06bd1262f438bf34769ecc00e9c22328e56.
      laanwj:
        Code review ACK 7593b06bd1262f438bf34769ecc00e9c22328e56
      kristapsk:
        ACK 7593b06bd1262f438bf34769ecc00e9c22328e56. Code looks correct, tested that functional test suite passes and also that `test/functional/p2p_addrv2_replay.py` fails if I undo changes in `IsRelayable()`.
    
    Tree-SHA512: c9feec4a9546cc06bc2fec6d74f999a3c0abd3d15b7c421c21fcf2d610eb94611489e33d61bdcd5a4f42041a6d84aa892f7ae293b0d4f755309a8560b113b735
    a88fa1a555
  242. Change ScriptPubKeyMan::Upgrade to default to return true
    If a ScriptPubKeyMan does not implement Upgrade, then using upgraewallet
    will fail unexpectedly. By changing the default to return true, then
    this error can be avoided. This is still correct because a successful
    upgrade can be that nothing happened.
    48bd7d3b77
  243. bench: fix 32-bit narrowing warning in bench/peer_eviction.cpp e49d50cf40
  244. Make IsSegWitOutput return true for taproot outputs 8465978f23
  245. Merge bitcoin/bitcoin#22464: bench: fix 32-bit narrowing warning in bench/peer_eviction.cpp
    e49d50cf40766120d4079f2ae6f5b33a5952c4d0 bench: fix 32-bit narrowing warning in bench/peer_eviction.cpp (Jon Atack)
    
    Pull request description:
    
      Closes https://github.com/bitcoin/bitcoin/issues/22459.
    
    ACKs for top commit:
      hebasto:
        ACK e49d50cf40766120d4079f2ae6f5b33a5952c4d0, tested on Debian 10.10 (i386):
    
    Tree-SHA512: 8ca366fc296c633dbc8b8e0e7d80f4f6a64d02fb3da86d199881364f027d34b816a3c964b3fea2c1cc0b3ad51dd02d93c8bb14b5ebbd99fb4073cd1031766332
    f8b20fd35b
  246. Test that descriptor wallet upgrade does nothing 5012a7912e
  247. Merge bitcoin/bitcoin#21430: build: Add -Werror=implicit-fallthrough compile flag
    3c4c8e79baf02af97ba1502189f649b04ef2198d build: Add -Werror=implicit-fallthrough compile flag (Hennadii Stepanov)
    014110c47d94ece6e3e655cdbf02ed8c91c7a5cf Use C++17 [[fallthrough]] attribute, and drop -Wno-implicit-fallthrough (Hennadii Stepanov)
    
    Pull request description:
    
    ACKs for top commit:
      fanquake:
        ACK 3c4c8e79baf02af97ba1502189f649b04ef2198d - looks ok to me now. Checked that warnings occur in our code & leveldb by removing a `[[fallthrough]]` or `FALLTHROUGH_INTENDED`.
      jarolrod:
        ACK 3c4c8e79baf02af97ba1502189f649b04ef2198d
      theStack:
        ACK 3c4c8e79baf02af97ba1502189f649b04ef2198d
    
    Tree-SHA512: 4dce91f0f26b8a3de09bd92bb3d7e1995e078e3a8b3ff861c4fbf6c0b32b2327d063633b07b89c4aa94a1141d7f78d46d9d43ab8df865273e342693ad30645b6
    6baabc4d1d
  248. Merge bitcoin/bitcoin#22234: build: Mark print-% target as phony.
    fb7be92b094477131140b58a4e3ae98366b93e76 Mark print-% target as phony. (Dmitry Goncharov)
    
    Pull request description:
    
      .PHONY does not take patterns (such as print-%) as prerequisites.
      Have print-% depend on force and mark force as phony.
    
      This change ensures print-% rule works even when there is a file that matches the target.
    
      ```
      $ # on master
      $ make print-host
      host=x86_64-pc-linux-gnu
      $ touch print-host
      $ make print-host
      make: 'print-host' is up to date.
      $
      $ git co mark_print_as_phony
      Switched to branch 'mark_print_as_phony'
      $ make print-host
      host=x86_64-pc-linux-gnu
      $ touch force
      $ make print-host
      host=x86_64-pc-linux-gnu
      ```
    
    ACKs for top commit:
      hebasto:
        ACK fb7be92b094477131140b58a4e3ae98366b93e76, tested on Linux Mint 20.2 (x86_64).
    
    Tree-SHA512: b89ae66aa8c7aa6a7ab5f0956f9eb3b3ef9d56994b60dc2a97d498d4c1bba537845c190723e8a10310280b1b35df2cd935cc30aeb76735cac2dc621ad7823772
    b5889611c7
  249. Merge bitcoin/bitcoin#20641: depends: Use Qt top-level build facilities
    1155978d8f3fcc1cebf357302b933b834f9c9465 build, qt: Do not install *.prl files (Hennadii Stepanov)
    763793b60e4ec0d1df129279ca3f08fc97d6d90e build, qt: Fix wrong cross-compiling detection on macOS (Hennadii Stepanov)
    30982721ab3129928fa0e3c06717350876de4f2d build, qt: Force bootstrap while building linguist tools (Hennadii Stepanov)
    689320e3074e2be3c47123a0b344d2f265ad9f4f build, qt: Drop translations.pro hack (Hennadii Stepanov)
    6a1f98f2536504c9bc24d8930c69838d8262062c build, qt: Drop lrelease dependency patch (Hennadii Stepanov)
    39e561e087246dd7e442c5bfbfee304fbc22d7e5 build, qt: Add linguist_tools list (Hennadii Stepanov)
    27d3def1c6d7a0bf447c62f0724136d6885c8d92 build: Use Qt top-level build facilities (Hennadii Stepanov)
    
    Pull request description:
    
      This PR:
      - uses Qt top-level build facilities without the need to download all-in-one archive
      - is based on **BlockMechanic**'s [idea](https://github.com/bitcoin/bitcoin/pull/20600), and is an alternative to #20600
      - makes it easy to integrate [new modules](https://github.com/bitcoin/bitcoin/pull/16883) into static builds
      - has the minimal diff
      - makes the qt package build process streamlined by dropping some patches and hacks (an alternative to  #21420 and #20642)
    
      Fixes #18536 (a non-intrusive alternative to #21589 and #19785).
    
      Fixes #14648.
    
      Fixes #21588 (a non-intrusive alternative to #21591).
    
      Required for adding [Wayland support](https://github.com/bitcoin/bitcoin/issues/19950) on Linux.
    
      ---
    
      **Note for reviewers**: With 9046de8a4cbc3899fed9eae084115f423e7ac5bd from #21995 it is easy to verify that there are no changes in the resulted `qt` package archive on the per commit basis. For example, for `HOST=i686-pc-linux-gnu` no commit in this PR introduces any changes.
    
    ACKs for top commit:
      fanquake:
        ACK 1155978d8f3fcc1cebf357302b933b834f9c9465
    
    Tree-SHA512: 667b06b72cb7ff26d68b9b88e8dddb51084783ca9e3d80b3392710794c1dc7fd77bbcc3ccf4ccece9919d33b9bf8fce13c5059502bd228021dc7c93fdb87ca7a
    4315dc02a1
  250. Merge bitcoin/bitcoin#22410: Avoid GCC 7.1 ABI change warning in guix build
    1edddf5de41b053049ce0b0bdbc39c2fbb743c40 Avoid GCC 7.1 ABI change warning in guix build (Pieter Wuille)
    
    Pull request description:
    
      The arm-linux-gnueabihf guix build output is littered with warnings like:
    
      ```
      /gnu/store/7a96hdqdb2qi8a39f09n84xjy2hr23rs-gcc-cross-arm-linux-gnueabihf-8.4.0/include/c++/bits/stl_vector.h:1085:4: note:
                       parameter passing for argument of type '__gnu_cxx::__normal_iterator<CRecipient*, std::vector<CRecipient> >' changed in GCC 7.1
      ```
    
      These are irrelevant for us. Disable them using `-Wno-psabi`.
    
    ACKs for top commit:
      laanwj:
        ACK 1edddf5de41b053049ce0b0bdbc39c2fbb743c40
      hebasto:
        ACK 1edddf5de41b053049ce0b0bdbc39c2fbb743c40, after thorough reading related materials, I agree this change can be merged. As I mentioned above, I have been compiling my arm-32bit binaries with `-Wno-psabi` flag for two years, and no related flaws were observed.
    
    Tree-SHA512: 485c7500547ac5da567ad23847341c18ff832607f5a1002676404cc647e437cf3445b6894ecff5b52929ca52bea946c06bd90eace1997c895e56204e787065e4
    4371e635d6
  251. DrahtBot commented at 6:38 am on July 18, 2021: member

    🐙 This pull request conflicts with the target branch and needs rebase.

    Want to unsubscribe from rebase notifications on this pull request? Just convert this pull request to a “draft”.

  252. DrahtBot added the label Needs rebase on Jul 18, 2021
  253. Merge bitcoin/bitcoin#22461: wallet: Change ScriptPubKeyMan::Upgrade default to True
    5012a7912ee9fa35bc417cb073eebffd85f36c6c Test that descriptor wallet upgrade does nothing (Andrew Chow)
    48bd7d3b7737656052d2c745ed40c7f6670842cf Change ScriptPubKeyMan::Upgrade to default to return true (Andrew Chow)
    
    Pull request description:
    
      When adding a new ScriptPubKeyMan, it's likely that there will be nothing for `Upgrade` to do. If it is called (via `upgradewallet`), then it should do nothing, successfully. This PR changes the default `ScriptPubKeyMan::Upgrade` function so that it returns a success instead of failure when doing nothing.
    
      Fixes #22460
    
    ACKs for top commit:
      jonatack:
        ACK 5012a7912ee9fa35bc417cb073eebffd85f36c6c
      meshcollider:
        utACK 5012a7912ee9fa35bc417cb073eebffd85f36c6c
    
    Tree-SHA512: 578c6521e997f7bb5cc44be2cfe9e0a760b6bd4aa301026a6b8b3282e8757473e4cb9f68b2e79dacdc2b42dddae718450072e0a38817df205dfea177a74d7f3d
    5341c3b1b3
  254. Merge bitcoin/bitcoin#22445: fuzz: Move implementations of non-template fuzz helpers from util.h to util.cpp
    a2aca207b1ad00ec05d7533dbd75bbff830e1d75 Move implementations of non-template fuzz helpers (Sriram)
    
    Pull request description:
    
      There are 78 cpp files that include `util.h` (`grep -iIr "#include <test/fuzz/util.h>" src/test/fuzz | wc -l`). Modifying the implementation of a fuzz helper in `src/test/fuzz/util.h` will cause all fuzz tests to be recompiled. Keeping the declarations of these non-template fuzz helpers in `util.h` and moving their implementations to `util.cpp` will skip the redundant recompilation of all the fuzz tests, and builds these helpers only once in `util.cpp`.
    
      Functions moved from `util.h` to `util.cpp`:
      - `ConsumeTxMemPoolEntry`
      - `ContainsSpentInput`
      - `ConsumeNetAddr`
      - Methods of `FuzzedFileProvider::(open, read, write, seek, close)`
    
    ACKs for top commit:
      MarcoFalke:
        review ACK a2aca207b1ad00ec05d7533dbd75bbff830e1d75 🍂
    
    Tree-SHA512: e7037ebb86d0fc56048e4f3d8733eefc21da11683b09d2b22926bda410719628d89c52ddd9b4c18aa243607a66fdb4d13a63e62ca010e66b3ec9174fd18107f0
    0eea1dfe80
  255. Merge bitcoin/bitcoin#22421: Make IsSegWitOutput return true for taproot outputs
    8465978f235e2e43feb5dabe2a4d61026343b6ab Make IsSegWitOutput return true for taproot outputs (Pieter Wuille)
    
    Pull request description:
    
      This fixes a bug: currently `utxoupdatepsbt` will not fill in UTXO data for PSBTs spending taproot outputs.
    
    ACKs for top commit:
      achow101:
        Code Review ACK 8465978f235e2e43feb5dabe2a4d61026343b6ab
      jonatack:
        ACK 8465978f235e2e43feb5dabe2a4d61026343b6ab
      meshcollider:
        utACK 8465978f235e2e43feb5dabe2a4d61026343b6ab
    
    Tree-SHA512: 2f8f873450bef4b5a4ce5962a231297b386c6b1445e69ce5f36ab28eca7343be3a11bc09c38534b0f75e6f99ba15d78d3ba5d484f6c63e5a9775e1f3f55a74e0
    e8f85e0e86
  256. Avoid remaking makefiles.
    The purpose of this commit is to reduce the amount of work make does.
    This simplifies make -d output and improves performance (this
    performance gain is hardly noticeable).
    
    By default make remakes all makefiles.
    This build system does not have rules to remake makefiles.
    This commit adds an explicit rule for each makefile.
    
    Each rule serves 2 purposes.
    1. Each rule prevents make from searching for an implicit rule.
    2. Once found, the rule prevents make from remaking the makefile.
    That's why the rule is double colon. Make won't use a double colon rule to
    remake a makefile. See
    https://www.gnu.org/software/make/manual/make.html#Remaking-Makefiles.
    
    $ # on this branch.
    $ make -d print-host |grep expat
    Reading makefile 'packages/expat.mk' (search path) (no ~ expansion)...
    Makefile 'packages/expat.mk' might loop; not remaking it.
    $ git co master
    Switched to branch 'master'
    Your branch is up-to-date with 'origin/master'.
    $ make -d print-host |grep expat |wc
        367    1916   19918
    $
    
    Make prints 367 lines per makefile.
    With this change make prints 2 lines per makefile.
    cd57f4dcd2
  257. Merge branch 'avoid_rebuilding_makefiles' of github.com:dgoncharov/bitcoin into avoid_rebuilding_makefiles
    * 'avoid_rebuilding_makefiles' of github.com:dgoncharov/bitcoin:
      Avoid remaking makefiles.
    61984af1d6
  258. dgoncharov closed this on Jul 18, 2021

  259. dgoncharov deleted the branch on Jul 18, 2021
  260. dgoncharov commented at 8:35 pm on July 18, 2021: none
    Closed in favor of pr #22486.
  261. fanquake commented at 5:19 am on July 19, 2021: member
    In future, please try and fixup / recover your branch rather than opening a new PR for the same change.
  262. fanquake removed the label Needs rebase on Jul 19, 2021
  263. fanquake locked this on Jul 19, 2021

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2024-12-20 03:12 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me