Repository navigation
backport: Merge bitcoin#30017, 29910, 29849, 29865 - #7257
Conversation
|
a8df81b to
3673fe0
Compare
|
✅ Final review complete — no blockers (commit ab3501f) · triage: normal |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThe subprocess header now uses a project-specific include guard and system error formatting. It removes deferred startup, shell, environment, working-directory, descriptor, session, and pre-execution options. POSIX execution calls Priority: ➖ Normal Estimated code review effort: 4 (Complex) | ~45 minutes Merge Risk: 🟠 High · up to The simplified subprocess header still references a removed field, which breaks the build on Linux/macOS when external signer support is enabled. This needs to be fixed before merge. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
src/test/fuzz/poolresource.cpp (1)
68-68: Optional: Considersize_t{1}instead of1Ufor consistency.For complete consistency with the other changes in this line, you could replace
- 1Uwith- size_t{1}. This is purely a style preference and doesn't affect correctness, as1Uwill be promoted tosize_tduring the subtraction.✨ Optional consistency fix
- size_t size = m_provider.ConsumeIntegralInRange<size_t>(size_t{1} << size_bits, (size_t{1} << (size_bits + 1)) - 1U) << alignment_bits; + size_t size = m_provider.ConsumeIntegralInRange<size_t>(size_t{1} << size_bits, (size_t{1} << (size_bits + 1)) - size_t{1}) << alignment_bits;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/test/fuzz/poolresource.cpp` at line 68, Replace the literal unsigned int used in the upper bound with a size_t brace-init for consistency: in the call to m_provider.ConsumeIntegralInRange<size_t> change the upper bound expression from ((size_t{1} << (size_bits + 1)) - 1U) to ((size_t{1} << (size_bits + 1)) - size_t{1}) so both operands are size_t; this edit is in the expression passed to m_provider.ConsumeIntegralInRange<size_t>.src/test/validation_chainstate_tests.cpp (1)
112-119: ReplaceAssert(...)withBOOST_REQUIREfor test-scoped failure handling.In test code,
Assert(...)callsabort()and terminates the entire test process immediately. UsingBOOST_REQUIRE/BOOST_REQUIRE_MESSAGEinstead aborts only the current test case, allowing other test cases in the suite to continue—critical for test-run completeness. This also aligns with the project's requirement that unit tests insrc/test/use Boost::Test.Suggested refactor
- CChainState& background_cs{*Assert([&]() -> CChainState* { + CChainState* background_cs_ptr{[&]() -> CChainState* { for (CChainState* cs : chainman.GetAll()) { if (cs != &chainman.ActiveChainstate()) { return cs; } } return nullptr; - }())}; + }()}; + BOOST_REQUIRE_MESSAGE(background_cs_ptr != nullptr, "Background chainstate not found"); + CChainState& background_cs{*background_cs_ptr};🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@src/test/validation_chainstate_tests.cpp` around lines 112 - 119, The test uses Assert(...) which aborts the whole process; replace it with Boost checks: iterate over chainman.GetAll() to find the non-active CChainState* (same logic as the lambda), store it in a CChainState* variable, then use BOOST_REQUIRE_MESSAGE(found != nullptr, "background chainstate not found") to fail only this test if null; finally bind CChainState& background_cs to *found (preserving the original variable name background_cs and using chainman.ActiveChainstate() to identify the active one).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@src/test/fuzz/poolresource.cpp`:
- Line 68: Replace the literal unsigned int used in the upper bound with a
size_t brace-init for consistency: in the call to
m_provider.ConsumeIntegralInRange<size_t> change the upper bound expression from
((size_t{1} << (size_bits + 1)) - 1U) to ((size_t{1} << (size_bits + 1)) -
size_t{1}) so both operands are size_t; this edit is in the expression passed to
m_provider.ConsumeIntegralInRange<size_t>.
In `@src/test/validation_chainstate_tests.cpp`:
- Around line 112-119: The test uses Assert(...) which aborts the whole process;
replace it with Boost checks: iterate over chainman.GetAll() to find the
non-active CChainState* (same logic as the lambda), store it in a CChainState*
variable, then use BOOST_REQUIRE_MESSAGE(found != nullptr, "background
chainstate not found") to fail only this test if null; finally bind CChainState&
background_cs to *found (preserving the original variable name background_cs and
using chainman.ActiveChainstate() to identify the active one).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: bf1c9f39-4bdd-4412-b32b-ce4ffdc697a7
📥 Commits
Reviewing files that changed from the base of the PR and between 31c8464 and 9fb5593d467374770847be704149ad3cfbdac7f9.
📒 Files selected for processing (21)
configure.acsrc/Makefile.amsrc/Makefile.test.includesrc/bitcoin-cli.cppsrc/bitcoin-wallet.cppsrc/bitcoind.cppsrc/common/run_command.cppsrc/common/url.cppsrc/common/url.hsrc/qt/main.cppsrc/test/common_url_tests.cppsrc/test/fuzz/poolresource.cppsrc/test/fuzz/string.cppsrc/test/system_tests.cppsrc/test/util/setup_common.cppsrc/test/validation_chainstate_tests.cppsrc/txorphanage.cppsrc/txorphanage.hsrc/util/subprocess.hsrc/wallet/rpc/util.cpptest/lint/lint-spelling.py
💤 Files with no reviewable changes (6)
- src/bitcoin-wallet.cpp
- src/qt/main.cpp
- src/test/util/setup_common.cpp
- src/bitcoin-cli.cpp
- src/bitcoind.cpp
- configure.ac
thepastaclaw
left a comment
There was a problem hiding this comment.
Code Review
I verified the exact patch scope for PR #7257 against the checked-out source at 9fb5593d467374770847be704149ad3cfbdac7f9. The successful agent section (codex-general) reported no findings, and direct inspection of the touched URL decoding, orphanage time-type cleanup, and subprocess header rename did not reveal a concrete correctness, Dash-specific interaction, or build-integration issue within this diff.
Reviewed commit: 9fb5593d
| @@ -921,6 +921,7 @@ libbitcoin_common_a_SOURCES = \ | |||
| coins.cpp \ | |||
| common/bloom.cpp \ | |||
| common/run_command.cpp \ | |||
| common/url.cpp \ | |||
There was a problem hiding this comment.
consider to do bitcoin#29967 to addition for bitcoin#29904
| throw OSError("TerminateProcess", 0); | ||
| } | ||
| #else | ||
| if (session_leader_) killpg(child_pid_, sig_num); |
knst
left a comment
There was a problem hiding this comment.
Looks good for me overall; but bitcoin#29865 should be included to this PR too
| @@ -160,11 +160,11 @@ class OSError: public std::runtime_error | |||
|
|
|||
| //Environment Variable types | |||
| #ifndef _MSC_VER | |||
| using env_string_t = std::string; | |||
| using env_char_t = char; | |||
| using env_string_t = std::string; | |||
There was a problem hiding this comment.
replace Adddressing linter errors for using tabs instead of spaces by backporting bitcoin#29865 which just removes most of this code ; to prevent conflicts in the future
thepastaclaw
left a comment
There was a problem hiding this comment.
Code Review
Backport bundle (bitcoin#29849, bitcoin#29904, bitcoin#29910, bitcoin#29961, bitcoin#30017, bitcoin#30026, bitcoin#30170) is clean overall; merge resolutions are faithful and Dash-specific subsystems are untouched. One real gap: the bitcoin#29961 cherry-pick left behind the now-dead param_pack/has_type template metaprogram in src/util/subprocess.h that upstream deleted alongside check_output. Non-blocking, but worth fixing to keep the file aligned with upstream and remove the lingering check_ouput/ouput typos that bitcoin#29849 implicitly relied on being gone.
Reviewed commit: 9fb5593d
🟡 1 suggestion(s)
1 additional finding
🟡 suggestion: Incomplete backport of bitcoin#29961: dead `param_pack`/`has_type` metaprogram remains
src/util/subprocess.h (lines 947-975)
Upstream bitcoin#29961 removed four pieces of dead code from subprocess.hpp: (1) util::is_ready, (2) Buffer's #if 0 copy/move debug ctors, (3) Popen::kill and its docstring entries, and (4) the param_pack / has_type<> template metaprogram in namespace detail. The Dash backport (commit 4518a34698) applied (1)-(3) but left (4) untouched at src/util/subprocess.h:947-975.
These templates existed solely to support compile-time validation of check_output / ArgumentDeducer / OptionDeducer — all of which the same upstream PR removed. There are no remaining users in the file. The cherry-pick is therefore semantically incomplete.
Leaving the block in place also preserves the misspellings check_ouput / ouput (lines 952-953), which partially defeats the purpose of bitcoin#29849 dropping subprocess.h from the codespell exclude list — a future spelling-lint run can surface them. Removing this block aligns Dash with upstream after bitcoin#29961 and removes the typo footgun in one shot.
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.
In `src/util/subprocess.h`:
- [SUGGESTION] lines 947-975: Incomplete backport of bitcoin#29961: dead `param_pack`/`has_type` metaprogram remains
Upstream bitcoin#29961 removed four pieces of dead code from `subprocess.hpp`: (1) `util::is_ready`, (2) `Buffer`'s `#if 0` copy/move debug ctors, (3) `Popen::kill` and its docstring entries, and (4) the `param_pack` / `has_type<>` template metaprogram in `namespace detail`. The Dash backport (commit 4518a34698) applied (1)-(3) but left (4) untouched at `src/util/subprocess.h:947-975`.
These templates existed solely to support compile-time validation of `check_output` / `ArgumentDeducer` / `OptionDeducer` — all of which the same upstream PR removed. There are no remaining users in the file. The cherry-pick is therefore semantically incomplete.
Leaving the block in place also preserves the misspellings `check_ouput` / `ouput` (lines 952-953), which partially defeats the purpose of bitcoin#29849 dropping `subprocess.h` from the codespell exclude list — a future spelling-lint run can surface them. Removing this block aligns Dash with upstream after #29961 and removes the typo footgun in one shot.
|
This pull request has conflicts, please rebase. |
c6e66c3 to
141c76d
Compare
thepastaclaw
left a comment
There was a problem hiding this comment.
Final validation — Phase 2 only (queue backlog)
Verified the Phase-2 findings against head 141c76d and the local upstream merge diffs. Two non-blocking backport-completeness issues remain: the title still advertises the absent bitcoin#29961 cleanup, and the bitcoin#29865 option removals leave three obsolete API documentation references. The previous orphanage prerequisite finding no longer applies, and the reported POSIX kill compilation issue is absent at this head; git diff --check passed, but no build or runtime tests were run.
🟡 1 suggestion(s) | 💬 1 nitpick(s)
1 finding(s) not shown inline (the lines are not part of this PR's diff)
🟡 Suggestion: Incomplete bitcoin#29961: unused templates and obsolete API comment remain
src/util/subprocess.h:728-759
The PR title still advertises bitcoin#29961, but its cleanup is absent from the final tree. Upstream merge 81174d8 removes util::is_ready, param_pack/has_type, disabled Buffer constructors, the commented-out Popen destructor, and Popen::kill, and updates the related API comments. These remain at HEAD, including the templates and check_ouput references here. Adding bitcoin#29865 addresses the requested ordering but does not implement bitcoin#29961. Apply the remaining cleanup, or remove bitcoin#29961 from the title and explicitly defer it. This is a scope/completeness issue, not a demonstrated build blocker.
source: gpt-6-astra (phase2-reviewer: backport-reviewer)
Review provenance
Source: reviewer 1: gpt-6-astra (agent: phase2-reviewer, role: general); reviewer 2: gpt-6-astra (agent: phase2-reviewer, role: backport-reviewer); reviewer 3: gpt-6-astra (agent: phase2-reviewer, role: dash-core-commit-history); final verifier: gpt-6-astra (agent: astra-verifier, role: final-verifier)
- Triage:
lowbygpt-6-astra(effort low) — The diff is a contained removal of unused subprocess options plus header renaming, typo fixes, and an explicit 64-bit fuzz-test shift, without changes to critical surfaces. - Phase 1 reviewers: not run (skipped for throughput: 15 PRs queued, above the 10 limit)
- Fresh verifier:
gpt-6-astra— final-verifier; agentastra-verifier - Phase 2 reviewers:
gpt-6-astra— general (completed, effort medium); agentphase2-reviewer,gpt-6-astra— backport-reviewer (completed, effort medium); agentphase2-reviewer,gpt-6-astra— dash-core-commit-history (completed, effort medium); agentphase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify each finding against the current code and only fix it if needed.
In `src/util/subprocess.h`:
- [SUGGESTION] src/util/subprocess.h:728-759: Incomplete bitcoin#29961: unused templates and obsolete API comment remain
The PR title still advertises bitcoin#29961, but its cleanup is absent from the final tree. Upstream merge 81174d8a9b8060b35341d88d3b54c08d9f2bb079 removes util::is_ready, param_pack/has_type, disabled Buffer constructors, the commented-out Popen destructor, and Popen::kill, and updates the related API comments. These remain at HEAD, including the templates and check_ouput references here. Adding #29865 addresses the requested ordering but does not implement #29961. Apply the remaining cleanup, or remove #29961 from the title and explicitly defer it. This is a scope/completeness issue, not a demonstrated build blocker.
- [NITPICK] src/util/subprocess.h:969-970: Omitted bitcoin#29865 documentation removals advertise deleted options
This PR removes cwd, defer_spawn, and start_process(), but the Popen documentation still advertises them: both constructor examples at lines 951 and 953 contain cwd{..}, and these lines describe start_process() with defer_spawn. Upstream #29865 removes all three references alongside the APIs. Apply those comment changes so the header no longer directs readers to options and methods that cannot compile.
Out-of-scope follow-up suggestions (1)
These are valid observations, but they are outside this PR's scope and should be handled in separate issues or author/maintainer-requested PRs rather than blocking this review.
- Missing logging prerequisite from bitcoin#30000 leaves a bitcoin#30170 hunk omitted — OUTDATED: The supplied current PR title advertises bitcoin#30026, bitcoin#30017, bitcoin#29961, bitcoin#29910, bitcoin#29849, and bitcoin#29865, not bitcoin#30170. The complete 02c72be..141c76d range contains four commits for bitcoin#29849, bitcoin#29910, bitcoin#30017, and bitcoin#29865, and git diff over that range contains no src/txorphanage.cpp changes. The earlier bitcoin#30170 omitted-hunk obligation is therefore outside the current advertised and implemented scope.
- Follow-up: Consider creating a separate issue or author/maintainer-requested PR for this.
| *13. start_process() - Start the child process. Only to be used when | ||
| * `defer_spawn` option was provided in Popen constructor. |
There was a problem hiding this comment.
💬 Nitpick: Omitted bitcoin#29865 documentation removals advertise deleted options
This PR removes cwd, defer_spawn, and start_process(), but the Popen documentation still advertises them: both constructor examples at lines 951 and 953 contain cwd{..}, and these lines describe start_process() with defer_spawn. Upstream bitcoin#29865 removes all three references alongside the APIs. Apply those comment changes so the header no longer directs readers to options and methods that cannot compile.
source: gpt-6-astra (phase2-reviewer: backport-reviewer)
There was a problem hiding this comment.
Resolved (re-reviewed at ab3501f6): The subprocess documentation now lists only the retained API and no longer advertises the removed cwd, start_process, or defer_spawn options.
141c76d to
1db9caa
Compare
|
This pull request has conflicts, please rebase. |
13f5391 Fix typos in `subprocess.hpp` (Hennadii Stepanov) Pull request description: Resolves one item in the bitcoin#28981 (review): > - Remove linter exclusions and fix all issues. Based on upstream arun11299/cpp-subprocess#101. ACKs for top commit: fanquake: ACK 13f5391 Tree-SHA512: 2ee27a5b7d1ba6f47a5148add155c918eadaaffb94a4b5dd3edea00e63440b87291c559361bf25a8db1567debff78cf7e9466dc34f14331ca1d426994837df93
…header name conventions 08f756b Replace locale-dependent `std::strerror` with `SysErrorString` (Hennadii Stepanov) d8e4ba4 refactor: Rename `subprocess.hpp` to follow our header name conventions (Hennadii Stepanov) Pull request description: This PR renames the header `*.hpp` --> `*.h` and adjusts the header guard name, which makes it available for processing by linters. Fixed the following linter warning: ``` The locale dependent function strerror(...) appears to be used: src/util/subprocess.h: std::runtime_error( err_msg + ": " + std::strerror(err_code) ) Unnecessary locale dependence can cause bugs that are very tricky to isolate and fix. Please avoid using locale-dependent functions if possible. Advice not applicable in this specific case? Add an exception by updating the ignore list in /bitcoin/test/lint/lint-locale-dependence.py ^---- failure generated from lint-locale-dependence.py ``` ACKs for top commit: TheCharlatan: ACK 08f756b Tree-SHA512: 57a2f01c20eb9552481e428a4969bd59e9ada9f784fe1a45cb62aa9c9152c8e950d336854f45af0e2e5dc7c7b2a1fb216c8f832e3d6ccfb457ad71b6e423231e
b50d127 refactor: Make 64-bit shift explicit (Hennadii Stepanov) Pull request description: This PR fixes MSVC warning [C4334](https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4334) in the fuzzing code. Similar to bitcoin#26252. All `DisableSpecificWarnings` dropped from `fuzz.vcxproj` as all remained are inherited from `common.init.vcxproj`. Required to simplify warning suppression porting to the CMake-based build system. ACKs for top commit: maflcko: utACK b50d127 sipsorcery: utACK b50d127 Tree-SHA512: 18f6082b4234506ad2f9df54e577031b97cdf9f7ef64cad4162f275660716ab73587a97d3af0f778dfd48d2751d8676b5d3381d0aa837fcc60a09704473a9209
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
13adbf7 remove unneeded environment option from cpp-subprocess (Sebastian Falbesoner) 2088777 remove unneeded cwd option from cpp-subprocess (Sebastian Falbesoner) 03ffb09 remove unneeded bufsize option from cpp-subprocess (Sebastian Falbesoner) 79c3036 remove unneeded close_fds option from cpp-subprocess (Sebastian Falbesoner) 62db8f8 remove unneeded session_leader option from cpp-subprocess (Sebastian Falbesoner) 80d008c remove unneeded defer_spawn option from cpp-subprocess (Sebastian Falbesoner) cececad remove unneeded preexec function option from cpp-subprocess (Sebastian Falbesoner) 633e45b remove unneeded shell option from cpp-subprocess (Sebastian Falbesoner) Pull request description: The newly introduced cpp-subprocess library provides a good number of options for the `Popen` class: https://github.com/bitcoin/bitcoin/blob/0de63b8b46eff5cda85b4950062703324ba65a80/src/util/subprocess.hpp#L1009-L1020 Some of them are either not fully implemented (`shell`, missing an implementation on Windows), implemented in an ugly way (e.g. using "Impoverished, meager, needy, truly needy version of type erasure" for `preexec_func` according to the author's own words) or simply unlikely to be ever needed for our external signer use-case (`defer_spawn`). Instead of maintaining incomplete and/or unneeded code, I'd suggest to get rid of it and only keep support for options if there is a strong reason for it. ACKs for top commit: achow101: ACK 13adbf7 hebasto: re-ACK 13adbf7. Tree-SHA512: 8270da27891cb659da2ef6062a23f4b86331859b15ac27b79ae7433b14f5bd7efaba621f2b3ba1953708d0f38377a8bd23ef1cc0f28b9c152ac8958dd9eec6b0
|
Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits. |
thepastaclaw
left a comment
There was a problem hiding this comment.
Re-review — Final validation — Phase 1 + Phase 2
The four advertised Bitcoin Core backports are consistently applied: the subprocess header rename and option removals update all affected references, the POSIX kill path remains valid, and the explicit fuzz shifts preserve the intended size_t arithmetic. The remaining unused templates and stale comments belong to bitcoin#29961, which is not part of this PR's stated scope; no actionable in-scope issues were found.
🔴 0 blocking | 🟡 0 suggestion(s) | 💬 0 nitpick(s)
Review provenance
Source: reviewer 1: muse-spark-1.3-contributor (agent: phase1-reviewer, role: general); reviewer 2: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 3: gpt-6.1-sol (agent: phase2-reviewer, role: backport-reviewer); reviewer 4: gpt-6.1-sol (agent: phase2-reviewer, role: dash-core-commit-history); reviewer 5: gpt-6.1-sol (agent: phase2-reviewer, role: general); reviewer 6: gpt-6.1-sol (agent: phase2-reviewer, role: backport-reviewer); reviewer 7: gpt-6.1-sol (agent: phase2-reviewer, role: dash-core-commit-history); final verifier: gpt-6.1-sol (agent: sol-verifier, role: final-verifier)
- Triage:
normalbygpt-6.1-sol(effort low) — This is a broad subprocess API and behavior backport removing hundreds of lines and changing process-launch semantics across platforms, but it does not directly modify consensus, funds, cryptography, networking deserialization, or storage migration code. - Phase 1 reviewers:
muse-spark-1.3-contributor— general (completed, effort xhigh); agentphase1-reviewer - Phase 1 model:
muse-spark-1.3-contributor— not quota-gated; passed overgemini-3.8-flash-high(antigravity below 15% reserve: weekly 84% left, 5h 6% left),glm-5.3-flash(not used above high effort; tier asks max) - Fresh final gate: an independent Phase-2 review ran after iterative findings were reconciled
- Fresh verifier:
gpt-6.1-sol— final-verifier; agentsol-verifier - Phase 2 reviewers:
gpt-6.1-sol— general (completed, effort high); agentphase2-reviewer,gpt-6.1-sol— backport-reviewer (completed, effort high); agentphase2-reviewer,gpt-6.1-sol— dash-core-commit-history (completed, effort high); agentphase2-reviewer,gpt-6.1-sol— general (completed, effort high); agentphase2-reviewer,gpt-6.1-sol— backport-reviewer (completed, effort high); agentphase2-reviewer,gpt-6.1-sol— dash-core-commit-history (completed, effort high); agentphase2-reviewer
🤖 Prompt for all review comments with AI agents
These findings are from an automated code review. Verify the current code and confirm that no unresolved issues remain.
No unresolved findings remain from the prior review on this head.
|
Hello @knst @PastaPastaPasta please approve |
fbe6526 Merge #7807: feat(consensus): hold EvoNode shares and multiple payouts behind a new evo_shares deployment (pasta) 57fd2d9 Merge #7776: fix: keep a pending ProUpServTx across a registrar update that keeps the operator key (pasta) ca69801 Merge #7803: fix: return non-zero amount of accounts after sethdseed (pasta) 57a8f07 Merge #7796: backport: bitcoin#26720 (remaining), partial bitcoin#29523: weight-check the knapsack exact-match selection (pasta) 4eb82f6 Merge #7786: fix(net): keep a dedicated onion listener when -bind is given and correct the bind release note (pasta) 70626a0 Merge #7793: backport: partial bitcoin#28868 (wallet: reload wallet if migration exited early, keep mixed watchonly txs) (pasta) 250a3cd Merge #7790: fix: guard cached governance object flags with the object lock (pasta) 700c195 Merge #7787: fix: only sign EHF signals inside the deployment's start/timeout window (pasta) a3b0f3c Merge #7785: fix: restore the txindex requirement when governance validation is enabled (pasta) 2d1735d Merge #7794: fix(wallet): floor the denomination gap threshold so rebalancing cannot oscillate (pasta) d9f6592 Merge #7783: fix: stop fish completion from re-running the typed dash-cli command (pasta) 89d44c8 Merge #7795: backport: bitcoin#34272, partial bitcoin#31650 (pass PSBT by const reference in PSBTInputSignedAndVerified) (pasta) a1d7411 Merge #7779: fix!: report legacy evonode Platform addresses when listdiff changes its address (pasta) 73f6ea2 Merge #7789: fix(qt): report malformed lang/font settings instead of aborting at startup (pasta) 40de493 Merge #7781: fix(rpc): use a consistent tip height in quorum dkgstatus (pasta) 7d1a90d Merge #7791: fix(net): request object votes from nPeersPerHashMax peers (pasta) 51b145c Merge #7778: test: use single-member in functional tests: feature_mnehf, feature_notifications, p2p_instantsend (pasta) Pull request description: ## Issue being fixed or feature implemented Backports for v24.0.0-rc.3. `v24.0.x` was cut at the v24.0.0-rc.2 tag (1e239d4), and develop has since moved to 24.1.0 (#7775), so rc.3 is built from this branch instead of being tagged on develop like rc.1 and rc.2. ## What was done? Cherry-picked (`git cherry-pick -m1 -x`) every develop merge since rc.2 that carries `backport-candidate-24.0.x`, plus #7778, which #7807's test needs. They are in develop merge order: - #7778 test: use single-member in functional tests: feature_mnehf, feature_notifications, p2p_instantsend (test-only. Needed because #7807's `feature_evo_shares_activation.py` depends on its `mine_quorum_single_member()` fix and fails without it.) - #7791 fix(net): request object votes from nPeersPerHashMax peers - #7781 fix(rpc): use a consistent tip height in quorum dkgstatus - #7789 fix(qt): report malformed lang/font settings instead of aborting at startup - #7779 fix!: report legacy evonode Platform addresses when listdiff changes its address - #7795 backport: bitcoin#34272, partial bitcoin#31650 (pass PSBT by const reference in PSBTInputSignedAndVerified) - #7783 fix: stop fish completion from re-running the typed dash-cli command - #7794 fix(wallet): floor the denomination gap threshold so rebalancing cannot oscillate - #7785 fix: restore the txindex requirement when governance validation is enabled - #7787 fix: only sign EHF signals inside the deployment's start/timeout window - #7790 fix: guard cached governance object flags with the object lock - #7793 backport: partial bitcoin#28868 (wallet: reload wallet if migration exited early, keep mixed watchonly txs) - #7786 fix(net): keep a dedicated onion listener when -bind is given and correct the bind release note. Includes partial bitcoin#36170 (5f40d56). Upstream's dedicated-onion-bind changes to `feature_torcontrol.py` and `p2p_private_broadcast.py` are not included, because those tests depend on upstream commits (5693833, e74d54e) that Dash does not have. - #7796 backport: bitcoin#26720 (remaining), partial bitcoin#29523: weight-check the knapsack exact-match selection - #7803 fix: return non-zero amount of accounts after sethdseed - #7776 fix: keep a pending ProUpServTx across a registrar update that keeps the operator key - #7807 feat(consensus): hold EvoNode shares and multiple payouts behind a new evo_shares deployment One pick needed conflict resolution, in a test only, described in its commit message: #7793, `test/functional/wallet_migration.py`. `test_conflict_txs()` comes from bitcoin#28542 (#7762), which is not on this branch, so it is left out. The C++ part of #7793 is identical to develop. Merged since rc.2 but intentionally not included: #7775 (24.1 version bump), #7260 and #7804 (new Qt feature and its CI fix), #7584 (refactor), routine upstream backports #7257, #7759, #7762, #7768, #7788, #7801, and test/CI-only changes #7777 and #7797. No version change is needed. `configure.ac` is already 24.0.0 with `CLIENT_VERSION_IS_RELEASE` false, so the build takes its version string from the `v24.0.0-rc.3` tag, as it did for rc.2. ## How Has This Been Tested? Built on macOS arm64 against depends with `--enable-debug --enable-werror` (dashd, dash-qt, tests). - `make check`: all unit test suites pass, including `test_dash-qt`. - Functional tests, all passing: `feature_evo_shares_activation.py`, `feature_masternode_shares.py`, `feature_mnehf.py`, `feature_governance.py --descriptors`, `feature_governance_objects.py`, `feature_governance_txindex_devnet.py`, `feature_proxy.py`, `feature_notifications.py`, `feature_llmq_connections.py`, `feature_llmq_chainlocks_automatic.py`, `feature_llmq_singlenode.py`, `p2p_instantsend.py`, `rpc_blockchain.py` (v1 and v2 transport), `rpc_netinfo.py`, `rpc_quorum.py`, `rpc_verifychainlock.py`, `wallet_hd.py` (legacy and descriptors), `wallet_migration.py`. - `feature_bind_extra.py` (from #7786) only runs on Linux and was skipped locally, so CI covers it. Every touched file was diffed against develop. The remaining differences come only from develop PRs that are not part of this backport. ## Breaking Changes Carried over from the picked PRs: - #7807: consensus change behind the new `evo_shares` deployment (bit 14). Mainnet and testnet are unaffected until it activates. Devnets with `v24` already active and an EvoNode carrying several owner payouts need to check or reset. New RPC `protx shared_register_prepare_evo`. - #7785: outside regtest, a node with `-txindex=0` and without `-disablegovernance` refuses to start again, as before v23.1.0. - #7786: carries a partial bitcoin#36170. A node started with `-bind` but no specific `-bind=<addr:port>=onion` now refuses to start while `-listenonion` is enabled. That is the default when listening, even without Tor configured. A wildcard onion bind is also refused. Such nodes need `-bind=127.0.0.1:<port>=onion` or `-listenonion=0`. Nodes without `-bind`, including those using only `-whitebind`, keep the default `127.0.0.1:9996` (`19996` testnet) onion target. See `doc/release-notes-7300.md`. - #7779: `protx listdiff` now includes `platform_p2p` and `platform_https` for a legacy-address evonode whose core P2P address changes. ## Checklist: - [x] I have performed a self-review of my own code - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone 🤖 Generated with [Claude Code](https://claude.com/claude-code) Top commit has no ACKs. Tree-SHA512: 8cb01bdb0234f31b5dd2c105b69673de148922991a7523627395c0e0ccfa22b94be5ffbecc842398d443bc90fd9baf2eee6a9cf6fcdbbd1626eb00b93726a55a
bitcoin backport