Skip to content

[pull] master from bitcoin:master - #1880

Merged
pull[bot] merged 10 commits into
All-Blockchains:masterfrom
bitcoin:master
Sep 29, 2026
Merged

pull[bot] merged 10 commits into
All-Blockchains:masterfrom
bitcoin:master

Conversation

@pull

@pull pull Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

fanquake and others added 10 commits September 22, 2026 09:24
In file included from /home/runner/work/_temp/src/init/common.cpp:11:
/home/runner/work/_temp/src/logging.h:66:24: error: ‘BCLog::RATELIMIT_MAX_BYTES’ defined but not used [-Werror=unused-const-variable=]
   66 |     constexpr uint64_t RATELIMIT_MAX_BYTES{1_MiB}; // maximum number of bytes per source location that can be logged within the RATELIMIT_WINDOW
      |                        ^~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
`python-lief` and `nsis-x86_64` transitively pull in packages whose
tests fail when building natively on `riscv64`:
- `python-lief`: `python-psutil`, `python-pytest-xprocess`, `python-sh`
- `nsis-x86_64`: `python-psutil`
This is necessary to unblock building on RISC-V systems.

Fixes #36232.
…wallet

Only kernel::Context users selected a hardware SHA256 implementation,
so these tools fell back to the generic one. On an M2 Max, grind is
~5x faster and signing 2000 P2PKH inputs with bitcoin-tx ~2.3x.
test_maxfeerate configured -maxfeerate=0.00001009 and then created a
transaction requesting the exact same fee rate. This is fragile because the
wallet sizes the fee from the estimated (maximum) signed vsize, while the
-maxfeerate limit is checked against the actual signed vsize.

When the actual signature is smaller than the estimate, the actual vsize is smaller than
estimated resulting in a higher feerate and the transaction is rejected, causing
intermittent CI failures.

Request a fee rate slightly below `-maxfeerate` so the transaction is accepted
regardless of the signature size, while still exercising the limit.
…x and bitcoin-wallet

4048909 tools: Call SHA256AutoDetect in bitcoin-util, bitcoin-tx and bitcoin-wallet (Torkel Rogstad)

Pull request description:

  Only kernel::Context users selected a hardware SHA256 implementation, so these tools fell back to the generic one. On an M2 Max, grind is ~5x faster and signing 2000 P2PKH inputs with bitcoin-tx ~2.3x.

ACKs for top commit:
  maflcko:
    lgtm ACK 4048909
  furszy:
    utACK 4048909

Tree-SHA512: 0edc6b78efbf0c84c22bbe98bd1ab295accc9530e24cee8f0faed9f63515fe8b677e8c33d3b46e0f1c0a44b422374cd7395ce163468d98772ea72a8faa9a1cfa
cf57dc2 build: add -Wunused-const-variable (fanquake)
b45a708 refactor: use inline constexpr (fanquake)

Pull request description:

  Split out of #36167.

  Fixes:
  ```bash
  /root/bitcoin/src/leveldb/db/dbformat.h:42:18: warning: ‘leveldb::config::kMaxMemCompactLevel’ defined but not used [-Wunused-const-variable=]
     42 | static const int kMaxMemCompactLevel = 2;
        |                  ^~~~~~~~~~~~~~~~~~~
  /root/bitcoin/src/leveldb/db/dbformat.h:28:18: warning: ‘leveldb::config::kL0_CompactionTrigger’ defined but not used [-Wunused-const-variable=]
     28 | static const int kL0_CompactionTrigger = 4;
        |                  ^~~~~~~~~~~~~~~~~~~~~
  In file included from /root/bitcoin/src/leveldb/db/dbformat.h:13:
  /root/bitcoin/src/leveldb/include/leveldb/db.h:19:18: warning: ‘leveldb::kMinorVersion’ defined but not used [-Wunused-const-variable=]
     19 | static const int kMinorVersion = 22;
        |                  ^~~~~~~~~~~~~
  /root/bitcoin/src/leveldb/include/leveldb/db.h:18:18: warning: ‘leveldb::kMajorVersion’ defined but not used [-Wunused-const-variable=]
     18 | static const int kMajorVersion = 1;
        |                  ^~~~~~~~~~~~~
  ```

  ```bash
  In file included from /home/runner/work/_temp/src/init/common.cpp:11:
  /home/runner/work/_temp/src/logging.h:66:24: error: ‘BCLog::RATELIMIT_MAX_BYTES’ defined but not used [-Werror=unused-const-variable=]
     66 |     constexpr uint64_t RATELIMIT_MAX_BYTES{1_MiB}; // maximum number of bytes per source location that can be logged within the RATELIMIT_WINDOW
        |                        ^~~~~~~~~~~~~~~~~~~
  cc1plus: all warnings being treated as errors
  ```
  etc.

ACKs for top commit:
  maflcko:
    lgtm ACK cf57dc2
  BrandonOdiwuor:
    ACK cf57dc2
  hebasto:
    ACK cf57dc2.

Tree-SHA512: b1a2dac38f942da7f0250f4040007f06de14a9f3ddc1554ef090ea12bcb1c79c2a66449189f39503d203d4dd549f74103b2e8545f3cfcb8f1dcc1a0ca774563b
…ea615e9acfc74f8`

feb77d8 guix: Update time-machine to `60f6956aeffa7f30285745bd0ea615e9acfc74f8` (Hennadii Stepanov)
f14a3ef guix: Skip some packages' tests in `python-lief` and `nsis-x86_64` (fanquake)

Pull request description:

  On the master branch @ 1781781, building on a RISC-V system [fails](#36232):
  ```
  guix shell: error: package python-lief@0.17.5 does not support riscv64-linux
  ```

  Also see #34550 (comment).

  This is caused by the `python-msgspec` package, an indirect dependency of `python-lief`:

  `python-lief` <-- `python-scikit-build-core` <-- `python-cattrs` <-- `python-msgspec`

  Also see #34550 (comment).

  This [commit](https://codeberg.org/guix/guix/commit/b35905695afd2e24c56e6950433dd4f571581873) updates `python-msgspec` and removes `(supported-systems (list "x86_64-linux" "aarch64-linux"))` from its definition.

  Package updates:
  - `git-minimal`: 2.52.0 -> 2.54.0
  - `linux-headers` 6.1.166 -> 6.1.172
  - `python-lief`:  0.17.5 -> 0.17.6
  - `python-minimal`: 3.11.14 -> 3.12.12

  Additionally, `python-lief` and `nsis-x86_64` transitively pull in packages whose tests fail when building natively on `riscv64`:
  - `python-lief`: `python-psutil`, `python-pytest-xprocess`, `python-sh`
  - `nsis-x86_64`: `python-psutil`

  Tests for the problematic packages are temporarily disabled.

  Fixes #36232.

ACKs for top commit:
  maflcko:
    re-review ACK feb77d8 🦏
  willcl-ark:
    ACK feb77d8

Tree-SHA512: c89c57e0f3f8090c3eaa52cbc6b55c6564f297158afebf8306bcae692f4f5121156e64e5af3fb9e6dcb0091a9cd2d65e002854abb5befd7df6df31f1618ed280
025768f test: avoid testing at the exact `-maxfeerate` boundary (ismaelsadeeq)

Pull request description:

  Fixes #36363

  `test_maxfeerate` configured `-maxfeerate=0.00001009` and then created a
  transaction requesting the exact same fee rate. This is fragile because the
  wallet sizes the fee from the estimated (maximum) signed vsize, while the
  `-maxfeerate` limit is checked against the actual signed vsize.

  When the actual signature is smaller than the estimate, the actual vsize is smaller than
  estimated resulting in a higher feerate and the transaction is rejected, causing
  intermittent CI failures.

  Request a fee rate slightly below `-maxfeerate` so the transaction is accepted
  regardless of the signature size, while still exercising the limit.

  Can be reproduced with

  ```diff
  --- a/test/functional/wallet_send.py
  +++ b/test/functional/wallet_send.py
  @@ -221,8 +221,17 @@ class WalletSendTest(BitcoinTestFramework):
                                       self.nodes[0].sendtoaddress, address=self.nodes[0].getnewaddress(), amount=1, fee_rate=11)
           self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), amount=1, fee_rate=9)

  -        self.restart_node(0, extra_args=['-maxfeerate=0.00001009'])
  -        self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), amount=1, fee_rate=Decimal("1.009"))
  +        self.restart_node(0, extra_args=['-maxfeerate=0.00001009', '-changetype=bech32m'])
  +        w = self.nodes[0].get_wallet_rpc(self.default_wallet_name)
  +        tr_addr = w.getnewaddress(address_type="bech32m")
  +        funding_txid = w.sendtoaddress(tr_addr, 5)
  +        self.generate(self.nodes[0], 1)
  +        vout = next(o["n"] for o in w.gettransaction(funding_txid, verbose=True)["decoded"]["vout"]
  +                    if o["scriptPubKey"]["address"] == tr_addr)
  +        # Spend the taproot input at exactly maxfeerate. The tr() descriptor
  +        # estimates a 65-byte sig but the key-path spend is 64 bytes, so the
  +        # estimated vsize always exceeds the actual deterministic rejection.
  +        w.send(outputs={w.getnewaddress(): 1}, fee_rate=Decimal("1.009"),
  +               options={"inputs": [{"txid": funding_txid, "vout": vout}], "add_inputs": False})
  ```

  The actual failure in #36363 is intermittent because legacy output signatures only sometimes result in a tx size smaller than estimated. It can be reproduced in master by running the test on the file from 100 to 200 times.

  And running it again at the same time with this PR does not fail.

ACKs for top commit:
  maflcko:
    lgtm ACK 025768f
  achow101:
    ACK 025768f
  furszy:
    utACK 025768f

Tree-SHA512: 9e70b238f22e6d75108c1b10096008aad5f1bea7ddbb51a11fe722674adcd2dada3dabe577a6049b242fcf826ccd582c16a025b406742ad6b3195a0dae27b44f
@pull pull Bot locked and limited conversation to collaborators Sep 29, 2026
@pull pull Bot added the ⤵️ pull label Sep 29, 2026
@pull
pull Bot merged commit ba8fdb9 into All-Blockchains:master Sep 29, 2026
0 of 25 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants