[30.x] Backports #34459

pull fanquake wants to merge 16 commits into bitcoin:30.x from fanquake:more_30_x_backports changing 18 files +148 −92
  1. fanquake commented at 11:55 am on January 30, 2026: member
  2. test: use ModuleNotFoundError in interface_ipc.py
    Change this so we catch the case where the capnp shared libs have been
    updated, and can no-longer be loaded by the Python module, resulting in
    a skipped test, even though pycapnp is installed. i.e:
    ```bash
    stderr:
    Traceback (most recent call last):
      File "/root/ci_scratch/build/test/functional/interface_ipc.py", line 20, in <module>
        import capnp  # type: ignore[import] # noqa: F401
        ^^^^^^^^^^^^
      File "/usr/local/lib64/python3.14/site-packages/capnp/__init__.py", line 36, in <module>
        from .version import version as __version__
      File "/usr/local/lib64/python3.14/site-packages/capnp/version.py", line 1, in <module>
        from .lib.capnp import _CAPNP_VERSION_MAJOR as LIBCAPNP_VERSION_MAJOR  # noqa: F401
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ImportError: libcapnpc.so.1.0.1: cannot open shared object file: No such file or directory
    ```
    
    Failing in this way should make it clear that `pycapnp` needs to be
    reinstalled/rebuilt.
    
    If  `pycapnp` is not installed, the test still skips as expected:
    ```bash
    Remaining jobs: [interface_ipc.py]
    1/1 - interface_ipc.py skipped (capnp module not available.)
    
    TEST             | STATUS    | DURATION
    
    interface_ipc.py | ○ Skipped | 0 s
    ```
    
    Fixes: #34016.
    
    Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
    
    Github-Pull: #34409
    Rebased-From: 905dfdee86d679f8ea31d841bceb77a5724a6b1b
    19b3e2e50e
  3. miniscript: correct and_v() properties
    and_v() must never be 'd'. This is not a bug fix since this was
    unreachable in valid Miniscripts: the first sub of an and_v() must be of
    type V, which conflicts with (i.e. never has) property 'd'.
    
    Github-Pull: #34434
    Rebased-From: 4fab35cf88c048d2784fe6d71d3f83cc4e420879
    48749cf4c7
  4. fuzz: Use `__AFL_SHM_ID` for naming test directories
    Use the AFL++ shared memory ID environment variable to create
    a deterministic datadir path. This prevents accumulation of stale
    directories after a fuzz iteration crashes or times out. During
    long fuzz campaigns, this accumulation has occasionally resulted
    in running out of disk space.
    
    Github-Pull: #34445
    Rebased-From: d3e681bc06758fe0686cd96fcfd4a1c4c5af62b4
    0a768d4a5a
  5. ci: Always print low ccache hit rate notice
    Github-Pull: #34453
    Rebased-From: fad2876ec330dbb833905d3b2ee5753abc3bc3af
    7317a0ba1f
  6. fanquake added this to the milestone 30.3 on Jan 30, 2026
  7. DrahtBot added the label Backport on Jan 30, 2026
  8. DrahtBot commented at 11:56 am on January 30, 2026: contributor

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

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    ACK willcl-ark, marcofleon

    If your review is incorrectly listed, please copy-paste <!–meta-tag:bot-skip–> into the comment that the bot should ignore.

    LLM Linter (✨ experimental)

    Possible typos and grammar issues:

    • hitrate -> hit rate [Compound word “hitrate” is nonstandard; “hit rate” (or “hit-rate”) is the correct, clear phrasing]

    2026-02-26 09:42:59

  9. fanquake force-pushed on Feb 2, 2026
  10. ci: [refactor] Allow overwriting check option in run helper
    Also, use str(e) consistently in all run helpers.
    
    This refactor does not change any behavior.
    
    This can be reviewed by checking that all instances are exactly
    identical code now:
    $ git grep --function-context 'def run(cmd'
    
    Github-Pull: #34461
    Rebased-From: 2222dadabbbd03be9b4b917583fd51b34857f40c
    f5d4dc9419
  11. fanquake force-pushed on Feb 3, 2026
  12. ci: Print verbose build error message in test-each-commit
    Github-Pull: #34461
    Rebased-From: bbbb78a4f28fd2378342398ccae60995ae0e08d2
    1a757af7ea
  13. fanquake force-pushed on Feb 3, 2026
  14. doc: fix broken bpftrace installation link
    The bpftrace project moved from iovisor/bpftrace to bpftrace/bpftraceand
    removed the separate INSTALL.md file. Installation instructionsare now
    in the README.md Quick Start section.
    
    Github-Pull: #34510
    Rebased-From: 42ee31e80c99bdb4d6affdc9dc22a0f3d5da7b59
    b7a182c749
  15. fanquake force-pushed on Feb 9, 2026
  16. build: avoid exporting secp256k1 symbols
    Take advantage of the new secp256k1 option to avoid visibility attributes on
    API functions.
    
    While most users of a shared libsecp always want API functions exported so that
    they can actually be linked against, we always build it statically. When that
    static lib is linked into a (static or shared) libbitcoinkernel, by default its
    symbols end up exported there as well.
    
    As libsecp is an implementation detail of the kernel (and any future Core lib),
    its symbols should never be exported.
    
    Github-Pull: #34554
    Rebased-From: 2ccfdb582b646d9bda07f0f13b97cb8c37a452aa
    85f8d28fac
  17. fanquake force-pushed on Feb 18, 2026
  18. net: reduce log level for PCP/NAT-PMP NOT_AUTHORIZED failures
    Users running on home networks with routers that don't support PCP (Port
    Control Protocol) or NAT-PMP port mapping receive frequent warning-level
    log messages every few minutes:
    
      "pcp: Mapping failed with result NOT_AUTHORIZED (code 2)"
    
    This is expected behavior for many consumer routers that have PCP
    disabled by default, not an actionable error.
    
    Add explicit constants for the NOT_AUTHORIZED result code (value 2)
    for both NAT-PMP and PCP protocols. Log the first NOT_AUTHORIZED
    failure at warning level for visibility, then downgrade subsequent
    occurrences to LogDebug to avoid log noise. Other failure types
    continue to warn unconditionally.
    
    Fixes #34114
    
    Co-authored-by: willcl-ark <will@256k1.dev>
    
    Github-Pull: #34549
    Rebased-From: afea2af1391314be0e5caaa0125c884da2405316
    412725b7a3
  19. fanquake force-pushed on Feb 20, 2026
  20. wallet: rpc: manpage: fix example missing `fee_rate` argument
    The function signature for the `send` RPC is:
    ```
    send [{"address":amount,...},{"data":"hex"},...] ( conf_target "estimate_mode" fee_rate options version )
    ```
    
    The last example in the manpage is missing the `fee_rate` arg, but is trying to specify the `options` arg, by index.
    The parser confuses the intended `options` arg as the missing `fee_rate` arg.
    
    See:
    ```
    $ bitcoin-cli -rpcuser=doggman -rpcpassword=donkey -rpcport=18554 -regtest send '{"bcrt1qusm48zmlzwr32csxdw4ar7atw260h22c9ten9l": 0.1}' 1 economical '{"add_to_wallet": false, "inputs": [{"txid":"0b7e1a471dc948b7a6187936b16e6d7d9833629b2f9dd8a392eb89928f63aaad", "vout":0}]}'
    error code: -8
    error message:
    Cannot specify both conf_target and fee_rate. Please provide either a confirmation target in blocks for automatic fee estimation, or an explicit fee rate.
    ```
    vs
    ```
    $ bitcoin-cli -rpcuser=doggman -rpcpassword=donkey -rpcport=18554 -regtest send '{"bcrt1qusm48zmlzwr32csxdw4ar7atw260h22c9ten9l": 0.1}' 1 economical null '{"add_to_wallet": false, "inputs": [{"txid":"0b7e1a471dc948b7a6187936b16e6d7d9833629b2f9dd8a392eb89928f63aaad", "vout":0}]}'
    {
      "psbt": "cHNidP8BAHECAAAAAa2qY4+SieuSo9idL5tiM5h9bW6xNnkYprdIyR1HGn4LAAAAAAD9////AkR2DwQAAAAAFgAUpLDwJu+wFRHLQAgKAb0psk7UVd2AlpgAAAAAABYAFOQ3U4t/E4cVYgZrq9H7q3K0+6lYAAAAAAABAIUCAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wQC4wMA/////wLIF6gEAAAAABYAFLMY1zihXrefAA0DA5nld4MCPjkrAAAAAAAAAAAmaiSqIant4vYcP3HR3v0/qZnfo2lTdVxpBol5mWK0i+vYNpdOjPkAAAAAAQEfyBeoBAAAAAAWABSzGNc4oV63nwANAwOZ5XeDAj45KwEIawJHMEQCIElTV4pbUrsPR9qHWcioowVv3QVWHizxwevfD0u/I8YyAiBCY3OzF81PSLM00h4ueQkehYuxDFZu7Jk51iejphKnnwEhA0VKdYVSyBpWoxBwTDOupB58Fi3mEBs+u+OOqEYVd2sZACICA98YLWyH7dBCfXVxe7woiLSTgV1mJN8Zc8KgZ77pVSg+GNBMeT5UAACAAQAAgAAAAIABAAAAbAAAAAAA",
      "txid": "625b71b314a6ac4f738634e29dc007cd5edc0427c1ae96ab706d06a62910cea2",
      "hex": "02000000000101adaa638f9289eb92a3d89d2f9b6233987d6d6eb1367918a6b748c91d471a7e0b0000000000fdffffff0244760f0400000000160014a4b0f026efb01511cb40080a01bd29b24ed455dd8096980000000000160014e437538b7f13871562066babd1fbab72b4fba9580247304402204953578a5b52bb0f47da8759c8a8a3056fdd05561e2cf1c1ebdf0f4bbf23c6320220426373b317cd4f48b334d21e2e79091e858bb10c566eec9939d627a3a612a79f012103454a758552c81a56a310704c33aea41e7c162de6101b3ebbe38ea84615776b1900000000",
      "complete": true
    }
    ```
    
    Github-Pull: #34561
    Rebased-From: 50cf6838e6aa51e0d712cbc1e13d686253bc8fe0
    d54d7dfe9f
  21. fanquake force-pushed on Feb 25, 2026
  22. test: Fix broken --valgrind handling after bitcoin wrapper
    Prior to this commit, tool_bitcoin.py was failing:
    
    ```sh
    $ ./bld-cmake/test/functional/tool_bitcoin.py --valgrind
    TestFramework (ERROR): Unexpected exception
    Traceback (most recent call last):
      File "./test/functional/test_framework/test_framework.py", line 138, in main
        self.setup()
        ~~~~~~~~~~^^
      File "./test/functional/test_framework/test_framework.py", line 269, in setup
        self.setup_network()
        ~~~~~~~~~~~~~~~~~~^^
      File "./test/functional/tool_bitcoin.py", line 38, in setup_network
        assert all(node.args[:len(node_argv)] == node_argv for node in self.nodes)
               ~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    AssertionError
    ```
    
    This commit fixes this issue by running `bitcoin` under valgrind. Also,
    it comes with other improvements:
    
    * Drop the outdated valgrind 3.14 requirement, because there is no
      distro that ships a version that old anymore.
    * Drop the VALGRIND_SUPPRESSIONS_FILE env var handling, because it was
      presumably never used since it was introduced. Also, the use-case
      seems limited.
    
    Review note:
    
    The set_cmd_args was ignoring the --valgrind test option.
    
    In theory, this could be fixed by refactoring Binaries::node_argv() to
    be used here. However, for now, just re-implement the node_argv logic in
    set_cmd_args to prepend the valgrind cmd.
    
    Github-Pull: #34608
    Rebased-From: fa03fbf7e31f384627230e1bc042f7f29c05ff68
    6993b1be78
  23. test: Remove redundant warning about missing binaries
    The error was added in commit 1ea7e45a1f445d32a2b690d52befb2e63418653b,
    because there was an additional confusing `AssertionError: [node 0]
    Error: no RPC connection` instead of just a single `FileNotFoundError:
    [Errno 2] No such file or directory`.
    
    This is no longer needed on current master.
    
    Also, the test is incomplete, because it was just checking bitcoind and
    bitcoin-cli, not any other missing binaries.
    
    Also, after the previous commit, it would not work in combination with
    --valgrind.
    
    Instead of trying to make it complete, and work in all combinations,
    just remove it, because the already existing error will be clear in any
    case.
    
    This can be tested via:
    
    ```sh
     ./test/get_previous_releases.py
    
     mv releases releases_backup
     # Confirm the test is skipped due to missing releases
     ./bld-cmake/test/functional/wallet_migration.py
     # Confirm the test fails due to missing releases
     ./bld-cmake/test/functional/wallet_migration.py --previous-releases
     mv releases_backup releases
    
     mv ./releases/v28.2 ./releases/v28.2_backup
     # Confirm the test fails with a single FileNotFoundError
     ./bld-cmake/test/functional/wallet_migration.py
     mv ./releases/v28.2_backup ./releases/v28.2
     # Confirm the test runs and passes
     ./bld-cmake/test/functional/wallet_migration.py
    
     rm ./bld-cmake/bin/bitcoind
     # Confirm the test fails with a single "No such file or directory",
     # testing with and without --valgrind
     ./bld-cmake/test/functional/wallet_migration.py
     ./bld-cmake/test/functional/wallet_migration.py --valgrind
    ```
    
    Github-Pull: #34608
    Rebased-From: fa29fb72cb21bec798ddae49b842c78ac84a5a3b
    dd8924909a
  24. test: valgrind --trace-children=yes for bitcoin wrapper
    Github-Pull: #34608
    Rebased-From: fa5d478853a88ce7d7095b6abfe8112390298b65
    dca7700269
  25. fanquake force-pushed on Feb 25, 2026
  26. guix: use a temporary file over sponge
    Remove sponge (moreutils).
    
    Github-Pull: #34627
    Rebased-From: c86bce597a3c4d45f7c2b6149197d8303bda0e87
    2d035b1d4f
  27. fanquake force-pushed on Feb 25, 2026
  28. doc: Update Guix install for Debian/Ubuntu
    Fixes https://github.com/bitcoin/bitcoin/issues/33982
    
    Co-authored-by: Purple Ninja <129023353+ToRyVand@users.noreply.github.com>
    
    Github-Pull: #34671
    Rebased-From: faa70ca7642bd653cbd2e544c17fa58d2672afa4
    0202ae341f
  29. doc: update release notes for v30.x fdaf6565a9
  30. fanquake force-pushed on Feb 26, 2026
  31. fanquake requested review from willcl-ark on Feb 26, 2026
  32. willcl-ark approved
  33. willcl-ark commented at 12:17 pm on February 26, 2026: member

    ACK fdaf6565a974fb65a290618b0f3b0f5268481795

    Looks ok to me. 34608 took me a minute, as the backport looks quite messy in the diff, but in reality Binaries had just moved from ustil.py to test_framework.py. This affected the 3rd commit too where --trace-children=yes had moved.

    Other than that all backports were clean and look correct.

  34. fanquake marked this as ready for review on Feb 26, 2026
  35. fanquake requested review from marcofleon on Feb 26, 2026
  36. marcofleon approved
  37. marcofleon commented at 5:15 pm on February 26, 2026: contributor

    lgtm ACK fdaf6565a974fb65a290618b0f3b0f5268481795

    #34445 looking very useful, good choice for a backport.

  38. fanquake merged this on Feb 27, 2026
  39. fanquake closed this on Feb 27, 2026

  40. fanquake deleted the branch on Feb 27, 2026

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: 2026-03-09 21:13 UTC

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