Skip to content

Conversation

@PastaPastaPasta
Copy link
Member

Issue being fixed or feature implemented

Batch of backports by @DashCoreAutoGuix

What was done?

How Has This Been Tested?

Breaking Changes

Checklist:

Go over all the following points, and put an x in all the boxes that apply.

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have made corresponding changes to the documentation
  • I have assigned this pull request to a milestone (for repository code-owners and collaborators only)

@PastaPastaPasta PastaPastaPasta added this to the 23 milestone Jul 24, 2025
@github-actions
Copy link

github-actions bot commented Jul 24, 2025

✅ No Merge Conflicts Detected

This PR currently has no conflicts with other open PRs.

@PastaPastaPasta PastaPastaPasta force-pushed the backport-batch-jul-24-2025 branch from 87d60f4 to 3596986 Compare July 24, 2025 19:19
@coderabbitai
Copy link

coderabbitai bot commented Jul 24, 2025

Walkthrough

This set of changes includes documentation updates, test improvements, and code modifications across the wallet, RPC, utility, and GUI components. Documentation files were updated for clarity, formatting, and to reflect new or changed RPC fields and behaviors, such as the addition of the next_index field in listdescriptors and consistent reporting of the abandoned field in transaction RPCs. Several code changes update how passphrases containing null characters are handled and reported in both the wallet GUI and RPC interfaces, with corresponding new and enhanced tests verifying these behaviors. Utility code was refactored to separate data directory creation and configuration file path logic into dedicated methods, with corresponding interface changes. Additional minor fixes include comment typo corrections, header include adjustments, and Makefile translation target improvements. Functional tests were enhanced to cover new edge cases, such as banlist recreation and zero-value transaction rejection.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~18 minutes

Complexity label: Moderate

Rationale:
The changes span multiple components, including wallet logic, RPC interface, GUI, utility infrastructure, and tests. While many changes are documentation or comment updates, several involve non-trivial logic updates (e.g., new validation in transaction creation, enhanced passphrase handling, new methods in utility classes, and test coverage for new/edge behaviors). The volume and diversity of changes, with some requiring careful review for correctness and backward compatibility, place this PR in the moderate complexity range.

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
doc/release-process.md (1)

70-76: Clarify tag-fetching to guarantee the tag actually exists locally

git fetch origin "v${VERSION}" only downloads the object to FETCH_HEAD; it does not create a local tag, so the subsequent git checkout "v${VERSION}" will fail for first-time builders.
Suggest fetching the tag explicitly (or all tags) so it materialises locally:

-git fetch origin "v${VERSION}"
+# Either grab the single tag …
+git fetch --depth=1 origin "refs/tags/v${VERSION}:refs/tags/v${VERSION}"
+# … or, if bandwidth isn’t a concern, fetch them all:
+# git fetch --tags origin

This guarantees git checkout "v${VERSION}" works out-of-the-box and avoids confusion for new builders.

doc/release-notes-27068.md (1)

1-6: LGTM! Clear documentation of important wallet behavior change.

The release note accurately documents the change to wallet passphrase handling, clearly explaining the new support for null characters and the previous limitation.

Optional style improvement per static analysis:

- Prior to this change, only characters up to the first
+ Before this change, only characters up to the first
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9f3e4fa and 2b7ba5f169cd3d973c6a28eed5beea33f8665a34.

📒 Files selected for processing (24)
  • ci/test/00_setup_env_native_valgrind.sh (1 hunks)
  • ci/test/00_setup_env_s390x.sh (1 hunks)
  • contrib/valgrind.supp (1 hunks)
  • doc/descriptors.md (1 hunks)
  • doc/release-notes-25158.md (1 hunks)
  • doc/release-notes-27068.md (1 hunks)
  • doc/release-process.md (1 hunks)
  • src/Makefile.qt.include (1 hunks)
  • src/crypto/sha256_arm_shani.cpp (1 hunks)
  • src/hash.h (1 hunks)
  • src/init.cpp (1 hunks)
  • src/node/blockstorage.cpp (3 hunks)
  • src/qt/askpassphrasedialog.cpp (3 hunks)
  • src/support/allocators/secure.h (1 hunks)
  • src/support/lockedpool.cpp (1 hunks)
  • src/support/lockedpool.h (1 hunks)
  • src/wallet/rpc/encrypt.cpp (4 hunks)
  • src/wallet/rpc/transactions.cpp (4 hunks)
  • src/wallet/rpc/wallet.cpp (1 hunks)
  • src/wallet/test/wallet_tests.cpp (1 hunks)
  • test/functional/feature_block.py (23 hunks)
  • test/functional/p2p_disconnect_ban.py (2 hunks)
  • test/functional/wallet_abandonconflict.py (1 hunks)
  • test/functional/wallet_encryption.py (1 hunks)
🧰 Additional context used
📓 Path-based instructions (6)
src/**/*.{cpp,h,cc,cxx,hpp}

📄 CodeRabbit Inference Engine (CLAUDE.md)

src/**/*.{cpp,h,cc,cxx,hpp}: Dash Core C++ codebase must be written in C++20 and require at least Clang 16 or GCC 11.1
Dash uses unordered_lru_cache for efficient caching with LRU eviction

Files:

  • src/support/lockedpool.cpp
  • src/wallet/test/wallet_tests.cpp
  • src/support/allocators/secure.h
  • src/support/lockedpool.h
  • src/crypto/sha256_arm_shani.cpp
  • src/node/blockstorage.cpp
  • src/wallet/rpc/transactions.cpp
  • src/hash.h
  • src/wallet/rpc/encrypt.cpp
  • src/wallet/rpc/wallet.cpp
  • src/init.cpp
  • src/qt/askpassphrasedialog.cpp
doc/**

📄 CodeRabbit Inference Engine (CLAUDE.md)

Unless specifically prompted, avoid making changes to the doc directory (documentation)

Files:

  • doc/release-notes-25158.md
  • doc/release-notes-27068.md
  • doc/descriptors.md
  • doc/release-process.md
ci/**

📄 CodeRabbit Inference Engine (CLAUDE.md)

Unless specifically prompted, avoid making changes to the ci directory (continuous integration)

Files:

  • ci/test/00_setup_env_s390x.sh
  • ci/test/00_setup_env_native_valgrind.sh
src/{test,wallet/test,qt/test}/**/*.{cpp,h,cc,cxx,hpp}

📄 CodeRabbit Inference Engine (CLAUDE.md)

Unit tests for C++ code should be placed in src/test/, src/wallet/test/, or src/qt/test/ and use Boost::Test or Qt 5 for GUI tests

Files:

  • src/wallet/test/wallet_tests.cpp
test/functional/**/*.py

📄 CodeRabbit Inference Engine (CLAUDE.md)

Functional tests should be written in Python and placed in test/functional/

Files:

  • test/functional/wallet_abandonconflict.py
  • test/functional/feature_block.py
  • test/functional/wallet_encryption.py
  • test/functional/p2p_disconnect_ban.py
contrib/**

📄 CodeRabbit Inference Engine (CLAUDE.md)

Unless specifically prompted, avoid making changes to the contrib directory (contributed scripts)

Files:

  • contrib/valgrind.supp
🧠 Learnings (17)
📓 Common learnings
Learnt from: kwvg
PR: dashpay/dash#6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.
Learnt from: kwvg
PR: dashpay/dash#6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.
Learnt from: kwvg
PR: dashpay/dash#6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The `GetWallet()` function calls in `src/wallet/rpcwallet.cpp` are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.
Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to src/{test,wallet/test,qt/test}/**/*.{cpp,h,cc,cxx,hpp} : Unit tests for C++ code should be placed in src/test/, src/wallet/test/, or src/qt/test/ and use Boost::Test or Qt 5 for GUI tests
doc/release-notes-25158.md (2)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

Learnt from: kwvg
PR: #6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.

ci/test/00_setup_env_s390x.sh (1)

Learnt from: kwvg
PR: #6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.

src/wallet/test/wallet_tests.cpp (4)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

Learnt from: kwvg
PR: #6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.

Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to src/{test,wallet/test,qt/test}/**/*.{cpp,h,cc,cxx,hpp} : Unit tests for C++ code should be placed in src/test/, src/wallet/test/, or src/qt/test/ and use Boost::Test or Qt 5 for GUI tests

Learnt from: kwvg
PR: #6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.

doc/release-notes-27068.md (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

test/functional/wallet_abandonconflict.py (2)

Learnt from: kwvg
PR: #6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

test/functional/feature_block.py (2)

Learnt from: kwvg
PR: #6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.

Learnt from: kwvg
PR: #6726
File: test/functional/rpc_createmultisig.py:120-120
Timestamp: 2025-06-20T23:32:16.225Z
Learning: In the rpc_createmultisig.py test, the checkbalances() function correctly excludes 9 blocks from the balance calculation: 8 blocks from do_multisig() calls (2 blocks per call × 4 calls) plus 1 block from checkbalances() itself.

ci/test/00_setup_env_native_valgrind.sh (2)

Learnt from: kwvg
PR: #6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.

Learnt from: kwvg
PR: #6516
File: ci/test/00_setup_env_mac.sh:11-11
Timestamp: 2025-01-02T08:33:26.751Z
Learning: The removal of DMG support in the macOS packaging process eliminates the need for python-based scripts or python3-setuptools in the build environment. The PACKAGES variable in ci/test/00_setup_env_mac.sh is vestigial due to the use of a general-purpose Docker container defined in contrib/containers/ci/Dockerfile.

test/functional/wallet_encryption.py (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

src/node/blockstorage.cpp (1)

Learnt from: kwvg
PR: #6665
File: src/evo/providertx.h:82-82
Timestamp: 2025-06-06T11:53:09.094Z
Learning: In ProTx serialization code (SERIALIZE_METHODS), version checks should use hardcoded maximum flags (/is_basic_scheme_active=/true, /is_extended_addr=/true) rather than deployment-based flags. This is because serialization code should be able to deserialize any structurally valid ProTx up to the maximum version the code knows how to handle, regardless of current consensus validity. Validation code, not serialization code, is responsible for checking whether a ProTx version is consensus-valid based on deployment status.

src/wallet/rpc/transactions.cpp (2)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to src/evo/specialtx.h : Special transactions use payload extensions defined in src/evo/specialtx.h

src/hash.h (1)

Learnt from: kwvg
PR: #6532
File: src/test/fuzz/netaddress.cpp:83-84
Timestamp: 2025-01-14T09:06:19.717Z
Learning: In fuzzer harness tests, CServiceHash can be used with both default constructor (CServiceHash()) and parameterized constructor (CServiceHash(salt_k0, salt_k1)) to test different variants. The usage pattern CServiceHash()(service) and CServiceHash(0, 0)(service) is valid and intentional in such tests.

src/Makefile.qt.include (1)

Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to src/**/*.{cpp,h,cc,cxx,hpp} : Dash Core C++ codebase must be written in C++20 and require at least Clang 16 or GCC 11.1

src/wallet/rpc/encrypt.cpp (2)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

Learnt from: kwvg
PR: #6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.

doc/release-process.md (2)

Learnt from: UdjinM6
PR: dashpay/dash#0
File: :0-0
Timestamp: 2025-02-13T07:36:17.572Z
Learning: In GitHub Actions checkout action, fetch-depth: 0 fetches all commit history for all branches and tags, while a positive number like fetch-depth: 50 fetches only that many recent commits, which is useful for CI optimization.

Learnt from: kwvg
PR: #6754
File: contrib/containers/guix/docker-compose.yml:18-19
Timestamp: 2025-07-14T10:11:05.011Z
Learning: In the Guix build process for Dash Core, the guix.sigs directory requires write access as signatures are written to it during the build process, and dash-detached-sigs may be updated with git pull operations, so both directories need rw permissions in the Docker volume mounts.

src/wallet/rpc/wallet.cpp (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

src/qt/askpassphrasedialog.cpp (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

🧬 Code Graph Analysis (1)
test/functional/wallet_encryption.py (2)
src/wallet/rpc/encrypt.cpp (6)
  • walletlock (179-214)
  • walletlock (179-179)
  • walletpassphrasechange (126-177)
  • walletpassphrasechange (126-126)
  • walletpassphrase (10-124)
  • walletpassphrase (10-10)
test/functional/test_framework/util.py (1)
  • assert_raises_rpc_error (132-148)
🪛 LanguageTool
doc/release-notes-27068.md

[style] ~5-~5: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...ases may now contain null characters. Prior to this change, only characters up to the ...

(EN_WORDINESS_PREMIUM_PRIOR_TO)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: win64-build / Build source
  • GitHub Check: mac-build / Build source
  • GitHub Check: linux64_tsan-build / Build source
  • GitHub Check: arm-linux-build / Build source
  • GitHub Check: linux64_nowallet-build / Build source
  • GitHub Check: linux64-build / Build source
  • GitHub Check: linux64_ubsan-build / Build source
  • GitHub Check: linux64_fuzz-build / Build source
  • GitHub Check: linux64_sqlite-build / Build source
  • GitHub Check: Lint / Run linters
🔇 Additional comments (29)
src/Makefile.qt.include (3)

440-441: Good documentation practice.

The added comments clearly explain the purpose of the translation workflow changes and provide a helpful reference link to Transifex documentation for distinguishing between source and translation files.


446-446: Appropriate flag for source file generation.

The -drop-translations flag correctly ensures that existing translations are removed from the input .ts file, which is necessary for generating a proper source .xlf file rather than a translation file.


447-448: Effective post-processing for Transifex compliance.

The sed commands properly transform the generated .xlf file to meet Transifex source file requirements by:

  • Removing the redundant target-language="en" attribute
  • Eliminating empty <target> tags
  • Cleaning up the backup file created during the process

The approach using sed with in-place editing and backup cleanup is appropriate for this build system context.

src/support/lockedpool.h (1)

8-12: Removal of <stdint.h> may break transitive dependencies – please double-check downstream headers

The header itself only uses size_t, so replacing <stdint.h> with <cstddef> is correct here.
However, other compilation units that #include "support/lockedpool.h" might have been relying on the transitive inclusion of <stdint.h> for fixed-width integer types (uint8_t, int32_t, …). If any of them omitted their own <cstdint>/<stdint.h> include, this change will surface as a missing-type compile error.

No action is required in this file, but please run a full build or at least grep for translation units that:

  1. #include "support/lockedpool.h"
  2. use int*_t / uint*_t types
  3. do not include <cstdint> / <stdint.h> themselves.

If such files exist, add the proper include there to keep dependencies explicit.

src/support/lockedpool.cpp (1)

22-22: Good catch adding <limits> – resolves implicit std::numeric_limits use

The new include fixes the missing declaration problem cleanly; no further issues spotted.

doc/descriptors.md (1)

76-77: Formatting change looks good

Turning the hardened-suffix remark into a parenthetical detaches it from the bullet list without altering meaning. No further action needed.

src/init.cpp (1)

748-749: LGTM! Improved argument categorization.

Moving -permitbaremultisig from CONNECTION to NODE_RELAY category makes logical sense as this argument controls transaction relay policy rather than general connection settings. The change improves command-line argument organization without affecting functionality.

test/functional/feature_block.py (1)

174-174: LGTM! Clean code improvement by removing unused variables.

The removal of unused variable assignments from self.next_block() calls improves code readability and eliminates dead code. The test logic remains intact since these variables were either unused or reassigned later in the code flow.

Also applies to: 685-685, 765-765, 782-782, 816-816, 828-828, 864-864, 889-889, 970-970, 983-983, 997-997, 1018-1018, 1038-1038, 1056-1056, 1094-1094, 1122-1122, 1135-1135, 1150-1150, 1178-1178, 1184-1184, 1189-1189, 1221-1221, 1240-1240, 1278-1278

src/hash.h (1)

171-202: LGTM! Well-designed template class for hash verification.

The new HashVerifier template class provides a clean, modern alternative to the existing CHashVerifier. Key improvements include:

  • Uses a reference instead of pointer for safer source handling
  • LIFETIMEBOUND attribute prevents lifetime issues
  • Inherits from the simpler HashWriter base class
  • Template design allows flexibility with different source types
  • Clean interface with read, ignore, and extraction operator methods

The implementation is correct and follows good C++ practices.

src/crypto/sha256_arm_shani.cpp (1)

65-65: LGTM! Typo fix improves documentation quality.

Good catch fixing the spelling error from "implemenation" to "implementation" in the comment.

src/support/allocators/secure.h (1)

58-58: LGTM! Good documentation of potential security enhancement.

The TODO comment suggests a reasonable future improvement to extend secure memory locking to RPC parameters, which would complement the existing secure string allocator functionality.

doc/release-notes-25158.md (1)

1-6: LGTM! Clear and accurate release notes.

The documentation clearly describes the RPC wallet enhancement, specifying which RPCs are affected and the nature of the change. The format is consistent with standard release notes.

src/wallet/test/wallet_tests.cpp (1)

461-461: LGTM! Good catch on the typo fix.

The duplicate word "the" has been correctly removed from the comment, improving readability.

test/functional/p2p_disconnect_ban.py (2)

6-6: LGTM! Appropriate import for file operations.

The pathlib.Path import is correctly added to support the new banlist database recreation test.


40-48: LGTM! Excellent test for banlist database resilience.

The test properly verifies that the node can recreate the banlist database when the file is missing:

  • Correctly stops the node and deletes the banlist.json file
  • Uses assert_debug_log to verify the expected recreation message
  • Confirms the file exists after restart and the banlist is empty

This test enhances the robustness verification of the banlist persistence mechanism.

ci/test/00_setup_env_s390x.sh (1)

22-22: LGTM! Consistent test exclusion for platform stability.

Adding feature_init to the excluded tests is appropriate for the s390x CI environment, maintaining consistency with other problematic test exclusions on this platform.

test/functional/wallet_abandonconflict.py (1)

132-138: LGTM! Comprehensive test coverage for abandoned field.

The new test section properly verifies that the "abandoned" field is present and correctly set for all transaction categories in the listtransactions output. This complements the existing listsinceblock test and ensures full coverage of the RPC interface changes documented in the release notes.

The test logic is sound:

  • Filters transactions by the abandoned txid
  • Asserts transactions exist to avoid false positives
  • Iterates through all categories to verify field presence and correctness
contrib/valgrind.supp (1)

16-17: LGTM: Documentation update reflects current testing environment.

The update to Ubuntu 22.04 with clang accurately reflects the modernized CI infrastructure and helps maintainers understand the testing context for these suppressions.

ci/test/00_setup_env_native_valgrind.sh (1)

12-12: LGTM: Appropriate test exclusion for Valgrind environment.

Adding feature_init to the exclusion list follows the established pattern for handling tests that are problematic in Valgrind environments, helping maintain CI stability.

test/functional/wallet_encryption.py (1)

90-100: LGTM: Comprehensive test for null character support in passphrases.

The test properly validates the new null character functionality by:

  • Ensuring truncated passphrases (before null) correctly fail
  • Confirming full passphrases with embedded nulls work correctly
  • Performing end-to-end validation with signing operations

This aligns well with the RPC changes for null character handling.

src/wallet/rpc/wallet.cpp (1)

599-599: LGTM: Improved passphrase handling supports null characters.

The change from .c_str() to std::string_view{request.params[3].get_str()} correctly preserves embedded null characters in passphrases, aligning with the broader null character support improvements in wallet encryption.

src/wallet/rpc/transactions.cpp (2)

412-412: LGTM: Consistent abandoned field reporting across transaction categories.

The addition of the abandoned field to received transactions aligns with the documented behavior change, ensuring consistent reporting across all transaction types in wallet RPC responses.


479-479: LGTM: Documentation properly updated for consistent abandoned field.

The help text updates correctly reflect that the abandoned field is now always present across all transaction categories, removing the previous restriction to only the "send" category.

Also applies to: 591-591, 731-731

src/wallet/rpc/encrypt.cpp (2)

54-54: LGTM: Improved passphrase assignment using string_view.

The change from .c_str() to std::string_view construction is more efficient and cleaner, eliminating the need for temporary C-string conversion while maintaining the same security properties.

Also applies to: 151-151, 155-155, 256-256


84-94: LGTM: Enhanced error handling for null characters in passphrases.

The enhanced error messages provide clear guidance for users whose passphrases contain null characters, particularly those set in older software versions. The specific reference to issue bitcoin#27067 and the actionable advice improve the user experience.

Also applies to: 162-171

src/node/blockstorage.cpp (2)

496-496: LGTM: Standardized serialization version usage.

Using CLIENT_VERSION instead of fileout.GetVersion() provides consistent serialization behavior for block and undo data operations, improving predictability and compatibility.

Also applies to: 702-702


532-532: LGTM: Simplified hash verification with new HashVerifier class.

The replacement of CHashVerifier<CAutoFile> with the streamlined HashVerifier class simplifies the implementation while maintaining the same functionality. The comment provides helpful context for this change.

src/qt/askpassphrasedialog.cpp (2)

110-112: LGTM: Consistent passphrase assignment improvement in GUI.

The change from .c_str() to std::string_view matches the improvement made in the RPC interface, providing the same efficiency benefits while maintaining security properties.


187-199: LGTM: Consistent null character error handling in GUI.

The enhanced error messages for null characters in passphrases provide the same helpful guidance as the RPC interface, ensuring a consistent user experience across both GUI and RPC access methods.

Also applies to: 220-231

@UdjinM6 UdjinM6 added the RPC Some notable changes to RPC params/behaviour/descriptions label Jul 25, 2025
Copy link

@UdjinM6 UdjinM6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

some should be partial:
26649: missing some changes in src/node/blockstorage.cpp
24259: missing changes in test/functional/feature_syscall_sandbox.py

24282 does not do what it should, it's too early

@PastaPastaPasta
Copy link
Member Author

some should be partial:
26649: missing some changes in src/node/blockstorage.cpp
24259: missing changes in test/functional/feature_syscall_sandbox.py

@UdjinM6 what do you suggest we do about that? mark as partial and merge, or drop from PR?

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
test/README.md (5)

120-127: Use a proper Markdown heading instead of bold emphasis for “Linux”.

markdownlint is flagging MD036 because **Linux** is being used as a heading.
Switch to a real heading to satisfy linting and improve document structure.

-**Linux**
+#### Linux

145-152: Same heading issue for the macOS section.

Apply the same fix here:

-**macOS**
+#### macOS

122-132: Add recommended mount options to reduce risk and avoid surprises.

It’s best practice to mount a tmpfs with nosuid,nodev (and often mode=1777) so no executable set-uid files or device nodes can appear on the RAM disk.

-sudo mount -t tmpfs -o size=4g tmpfs /mnt/tmp/
+sudo mount -t tmpfs -o size=4g,nosuid,nodev,mode=1777 tmpfs /mnt/tmp/

This also prevents accidental permission errors when multiple users run the tests on the same host.


133-138: Clarify creation of the cache sub-directory before invoking test_runner.

test_runner.py expects the path passed via --cachedir to exist. The snippet assumes test_runner will create /mnt/tmp/cache, which it does not. Add the mkdir step to avoid a cryptic failure:

 sudo mkdir -p /mnt/tmp/cache
-test/functional/test_runner.py --cachedir=/mnt/tmp/cache --tmpdir=/mnt/tmp
+test/functional/test_runner.py --cachedir=/mnt/tmp/cache --tmpdir=/mnt/tmp

149-158: Ensure the RAM-disk directories exist on macOS as well.

For parity with the Linux block, explicitly create the sub-directories:

-diskutil erasevolume HFS+ ramdisk $(hdiutil attach -nomount ram://8388608)
+diskutil erasevolume HFS+ ramdisk $(hdiutil attach -nomount ram://8388608)
+mkdir -p /Volumes/ramdisk/{cache,tmp}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 15cb2621401c94612d8da90b0bdbf68521837d57 and 09e0f02f39e4ccfe89fee8de9f5121367adb8ce8.

📒 Files selected for processing (7)
  • doc/release-note-26194.md (1 hunks)
  • src/qt/bitcoin.cpp (1 hunks)
  • src/util/system.cpp (5 hunks)
  • src/util/system.h (2 hunks)
  • src/wallet/rpc/backup.cpp (2 hunks)
  • test/README.md (1 hunks)
  • test/functional/wallet_listdescriptors.py (3 hunks)
✅ Files skipped from review due to trivial changes (2)
  • doc/release-note-26194.md
  • src/wallet/rpc/backup.cpp
🧰 Additional context used
📓 Path-based instructions (2)
src/**/*.{cpp,h,cc,cxx,hpp}

📄 CodeRabbit Inference Engine (CLAUDE.md)

src/**/*.{cpp,h,cc,cxx,hpp}: Dash Core C++ codebase must be written in C++20 and require at least Clang 16 or GCC 11.1
Dash uses unordered_lru_cache for efficient caching with LRU eviction

Files:

  • src/qt/bitcoin.cpp
  • src/util/system.h
  • src/util/system.cpp
test/functional/**/*.py

📄 CodeRabbit Inference Engine (CLAUDE.md)

Functional tests should be written in Python and placed in test/functional/

Files:

  • test/functional/wallet_listdescriptors.py
🧠 Learnings (5)
📓 Common learnings
Learnt from: kwvg
PR: dashpay/dash#6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.
Learnt from: kwvg
PR: dashpay/dash#6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.
Learnt from: kwvg
PR: dashpay/dash#6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The `GetWallet()` function calls in `src/wallet/rpcwallet.cpp` are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.
Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to src/{test,wallet/test,qt/test}/**/*.{cpp,h,cc,cxx,hpp} : Unit tests for C++ code should be placed in src/test/, src/wallet/test/, or src/qt/test/ and use Boost::Test or Qt 5 for GUI tests
src/qt/bitcoin.cpp (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

test/functional/wallet_listdescriptors.py (1)

Learnt from: kwvg
PR: #6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.

src/util/system.cpp (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

test/README.md (1)

Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to test/functional/**/*.py : Functional tests should be written in Python and placed in test/functional/

🧬 Code Graph Analysis (1)
src/util/system.h (1)
src/util/system.cpp (4)
  • GetConfigFilePath (980-983)
  • GetConfigFilePath (980-980)
  • EnsureDataDir (480-499)
  • EnsureDataDir (480-480)
🪛 LanguageTool
test/README.md

[style] ~117-~117: Consider a more concise word here.
Context: ...p` directories for the functional tests in order to speed them up. Speed-up amount varies o...

(IN_ORDER_TO_PREMIUM)

🪛 markdownlint-cli2 (0.17.2)
test/README.md

120-120: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


145-145: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (10)
  • GitHub Check: mac-build / Build source
  • GitHub Check: linux64_tsan-build / Build source
  • GitHub Check: arm-linux-build / Build source
  • GitHub Check: win64-build / Build source
  • GitHub Check: linux64_sqlite-build / Build source
  • GitHub Check: linux64_ubsan-build / Build source
  • GitHub Check: linux64-build / Build source
  • GitHub Check: linux64_fuzz-build / Build source
  • GitHub Check: linux64_nowallet-build / Build source
  • GitHub Check: Lint / Run linters
🔇 Additional comments (10)
test/functional/wallet_listdescriptors.py (2)

74-75: Excellent backward compatibility implementation.

This correctly includes both the legacy 'next': 0 field and the new 'next_index': 0 field in the expected response, ensuring proper testing of backward compatibility while validating the new functionality.


89-90: Consistent backward compatibility implementation.

This correctly maintains the same pattern as the public descriptor test, ensuring both the legacy 'next' and new 'next_index' fields are tested consistently across all descriptor listing scenarios.

src/qt/bitcoin.cpp (1)

174-174: LGTM! Good practice to ensure directory structure exists before settings operations.

The call to gArgs.EnsureDataDir() at the start of InitSettings() is well-placed and ensures the data directory and necessary subdirectories (like wallets/) are created before any settings file operations. This aligns with the broader refactoring to centralize directory management in the ArgsManager class.

src/util/system.h (2)

261-264: LGTM! Clean interface addition for config file path access.

The new GetConfigFilePath() method provides a clean, centralized way to access the configuration file path. The method signature is appropriate (const, returns fs::path) and the documentation clearly describes its purpose.


503-507: LGTM! Well-documented directory creation method.

The EnsureDataDir() method declaration is well-designed with clear documentation explaining its purpose. The const qualifier is appropriate since it doesn't modify the ArgsManager's state, only ensures external directory structure exists. The documentation correctly notes the creation of wallets/ subdirectories.

src/util/system.cpp (5)

451-452: LGTM! Simplified comment improves readability.

The comment simplification removes unnecessary implementation details while retaining the essential information about caching behavior. This makes the code more maintainable.


480-499: LGTM! Well-implemented directory creation with proper wallet subdirectory handling.

The EnsureDataDir() implementation correctly:

  • Creates both base and network-specific data directories when they don't exist
  • Creates the wallets/ subdirectory in both locations as documented
  • Includes comprehensive documentation explaining the wallet directory creation rationale
  • Uses proper conditional logic to only create directories when needed

The implementation aligns perfectly with the interface documentation and addresses the wallet compatibility requirements mentioned in the comments.


546-546: LGTM! Proper placement of directory initialization.

Calling EnsureDataDir() at the start of InitSettings() ensures the necessary directory structure exists before any settings operations. This is the correct place to guarantee the environment is properly set up.


980-983: LGTM! Clean encapsulation of config file path logic.

The GetConfigFilePath() method properly encapsulates the configuration file path construction logic, improving code modularity and making it reusable across the codebase.


993-994: LGTM! Good refactoring to use the new centralized method.

Using GetConfigFilePath() instead of inline path construction improves code maintainability and consistency. The refactoring eliminates code duplication and centralizes the config file path logic.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Ensure backward compatibility testing for the 'next' field.

The test only validates the new next_index field but doesn't verify that the legacy next field is still present for backward compatibility. According to the AI summary, both fields should be included in the response.

Consider adding an assertion to test both fields:

 assert item['next_index'] == 0
+assert item['next'] == 0
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
assert item['next_index'] == 0
assert item['next_index'] == 0
assert item['next'] == 0
🤖 Prompt for AI Agents
In test/functional/wallet_listdescriptors.py at line 54, the test currently
asserts only the new 'next_index' field but does not check for the legacy 'next'
field required for backward compatibility. Add an assertion to verify that the
'next' field is present and has the expected value alongside the existing
'next_index' assertion to ensure both fields are tested.

@UdjinM6
Copy link

UdjinM6 commented Jul 27, 2025

some should be partial:
26649: missing some changes in src/node/blockstorage.cpp
24259: missing changes in test/functional/feature_syscall_sandbox.py

@UdjinM6 what do you suggest we do about that? mark as partial and merge, or drop from PR?

We could probably just drop them for now if this would make it easier to backport them (and earlier PRs) later.

DashCoreAutoGuix and others added 8 commits July 28, 2025 18:38
* Merge bitcoin#26794: test: test banlist database recreation

4bdcf57 test: test banlist database recreation (brunoerg)

Pull request description:

  This PR adds test coverage for 'banlist database recreation'. If it wasn't able to read ban db (in `LoadBanlist`), so it should create a new (an empty, ofc) one.
  https://github.com/bitcoin/bitcoin/blob/d8bdee0fc889def7c5f5076da13db4fce0a3728a/src/banman.cpp#L28-L45

ACKs for top commit:
  MarcoFalke:
    lgtm ACK 4bdcf57

Tree-SHA512: d9d0cd0c4b3797189dff00d3a634878188e7cf51e78346601fc97e2bf78c495561705214062bb42ab8e491e0d111f8bfcf74dbc801768bc02cf2b45f162aad85

* Apply suggestions from code review

---------

Co-authored-by: fanquake <fanquake@gmail.com>
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
…pile error

fadeb6b Add missing includes to fix gcc-13 compile error (MarcoFalke)

Pull request description:

  On current master:

  ```
    CXX      support/libbitcoin_util_a-lockedpool.o
  support/lockedpool.cpp: In member function ‘void Arena::free(void*)’:
  support/lockedpool.cpp:99:20: error: ‘runtime_error’ is not a member of ‘std’
     99 |         throw std::runtime_error("Arena: invalid or double free");
        |                    ^~~~~~~~~~~~~
  support/lockedpool.cpp:22:1: note: ‘std::runtime_error’ is defined in header ‘<stdexcept>’; did you forget to ‘#include <stdexcept>’?
     21 | #include <algorithm>
    +++ |+#include <stdexcept>
     22 | #ifdef ARENA_DEBUG
  support/lockedpool.cpp: In member function ‘void LockedPool::free(void*)’:
  support/lockedpool.cpp:320:16: error: ‘runtime_error’ is not a member of ‘std’
    320 |     throw std::runtime_error("LockedPool: invalid address not pointing to any arena");
        |                ^~~~~~~~~~~~~
  support/lockedpool.cpp:320:16: note: ‘std::runtime_error’ is defined in header ‘<stdexcept>’; did you forget to ‘#include <stdexcept>’?

ACKs for top commit:
  hebasto:
    ACK fadeb6b.
  fanquake:
    ACK fadeb6b - tested this fixes compilation with GCC 13. I don't think theres a need to do anything else here, and that'd also just potentially complicate backporting.

Tree-SHA512: 99f79cf385c913138a9cf9fc23be0a3a067b0a28518b8bdc033a7220b85bbc5d18f5356c5bdad2f628c22abb87c18b232724f606eba6326c031518559054be31

Co-authored-by: fanquake <fanquake@gmail.com>
Co-authored-by: Claude Code <claude@anthropic.com>
…ies of transaction in ListTransaction

* Merge bitcoin#23810: docs: avoid C-style casts; use modern C++ casts

* Merge bitcoin#25158: rpc, wallet: add abandoned field for all categories of transaction in ListTransaction

* test: add test for abandoned field in all transaction categories in listtransactions

This adds a test to verify that the 'abandoned' field is now present
for all transaction categories in listtransactions RPC, not just 'send'.
This ensures compatibility with bitcoin#25158 which made the
abandoned field available for all categories.

* fix: remove scope creep from bitcoin#25158

Bitcoin commit 91ccb62 only added the 'abandoned' field to all transaction
categories and updated documentation. The changes to feature_block.py were
unrelated stylistic improvements (removing unused variable assignments)
that constitute scope creep.

This preserves Bitcoin's intent by keeping only the core functionality
change and the appropriate test coverage in wallet_abandonconflict.py
(which replaces the missing wallet_bumpfee.py test since Dash doesn't
have RBF functionality).

Fixes size validation: reduced from 342.9% to appropriate range.

---------

Co-authored-by: Claude Code <claude@anthropic.com>
…t fetch"

876b91c release-process: Specify remote name in "git fetch" (Jeremy Rand)

Pull request description:

  Avoids "does not appear to be a git repository" error.

  Fixes bitcoin#24329

ACKs for top commit:
  shaavan:
    ACK 876b91c

Tree-SHA512: 0ba23cd51ca761823cab19200b69f07a5c23e1a501114e0af73b24195c306cebb789e187dd436f7b3895a10de31e41276bb2fc4b217cd152247d2704e44bc8da

Co-authored-by: MarcoFalke <falke.marco@gmail.com>
…oser to KEY section

bac30e8 docs: Move explanation of hardened key syntax closer to KEY section (Bitcoin Hodler)

Pull request description:

  The line about "(Anywhere a `'` suffix is permitted to denote hardened derivation, the suffix `h` can be used instead.)" belongs with the section on KEY expressions, not following the unrelated TREE section.

ACKs for top commit:
  prusnak:
    ACK bac30e8
  meshcollider:
    ACK bac30e8

Tree-SHA512: 56fe97b89c02e67e94cab33b01e56f17f9b501b97036c5b35939dc4000a9d5e9afe4333869ba97bbe81372c538b7b2021a7d2520aba731400d8d0e62714d52b4

Co-authored-by: fanquake <fanquake@gmail.com>
Co-authored-by: Taeik Lim <sibera21@gmail.com>
…urce

985d85e Follow Transifex docs to prepare XLIFF source (Hennadii Stepanov)

Pull request description:

  This PR is a bitcoin#21694 follow up.

  From the Transifex [docs](https://docs.transifex.com/formats/xliff#how-to-distinguish-between-a-source-file-and-a-translation-file):
  > A source file is different than a translation file. The translation file contains \<Target> references, whereas a source file does not.

  This PR makes the `qt/locale/bitcoin_en.xlf` source file according to the docs.

ACKs for top commit:
  laanwj:
    ACK 985d85e

Tree-SHA512: 537ef78f39a12f094b17fc902c5b59c7ae4d27e5fa35fbf6b33386843e4521236dac3275ba26ff2d1c435e53e8942284644d5de67b0b3543cec96cbcd4351607

Co-authored-by: laanwj <126646+laanwj@users.noreply.github.com>
@PastaPastaPasta PastaPastaPasta force-pushed the backport-batch-jul-24-2025 branch from 09e0f02 to 733c1fd Compare July 28, 2025 23:38
@PastaPastaPasta PastaPastaPasta requested a review from UdjinM6 July 28, 2025 23:38
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
doc/release-notes-27068.md (1)

4-6: Tighten wording & follow release-note formatting convention

“Prior to this change” can be shortened to “Before this change” to avoid wordiness (per LanguageTool).
Additionally, Dash/Bitcoin release notes usually keep continuation lines indented under the initial bullet:

- - Wallet passphrases may now contain null characters.
-   Prior to this change, only characters up to the first
-   null character were recognized and accepted. (#27068)
+ - Wallet passphrases may now contain null characters.  
+   Before this change, only characters up to the first NUL  
+   character were recognized and accepted. (#27068)

Purely stylistic—feel free to ignore if you’re keeping exact back-ported wording.

test/README.md (3)

115-118: Drop filler phrasing for conciseness

The wording “in order to” and the hyphenated “Speed-up” are flagged by LanguageTool as unnecessary verbosity. A leaner sentence improves readability without losing meaning.

-If you have available RAM on your system you can create a RAM disk to use as the `cache` and `tmp` directories for the functional tests in order to speed them up.
-Speed-up amount varies on each system (and according to your RAM speed and other variables), but a 2-3x speed-up is not uncommon.
+If you have spare RAM you can create a RAM disk for the functional-test `cache` and `tmp` directories to speed them up.
+Depending on hardware, a 2-3× speed-up is common.

120-121: Replace bold text with proper sub-headings to satisfy MD036

markdownlint (MD036) warns against using emphasis instead of a heading.
Using an H5 sub-heading maintains hierarchy and removes the linter noise.

-**Linux**
+##### Linux-**macOS**
+##### macOS

Also applies to: 145-146


160-164: Use diskutil unmount/hdiutil detach on macOS

umount is available but not the usual tool on macOS.
Apple utilities provide clearer feedback and handle device node cleanup.

-umount /Volumes/ramdisk
+# Either of the following is more idiomatic:
+# diskutil unmount /Volumes/ramdisk
+# hdiutil detach /Volumes/ramdisk
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2b7ba5f169cd3d973c6a28eed5beea33f8665a34 and 733c1fdeeeaf894ceefe02c16860fe37ea1fe1f0.

📒 Files selected for processing (28)
  • doc/descriptors.md (1 hunks)
  • doc/release-note-26194.md (1 hunks)
  • doc/release-notes-25158.md (1 hunks)
  • doc/release-notes-27068.md (1 hunks)
  • doc/release-process.md (1 hunks)
  • src/Makefile.qt.include (1 hunks)
  • src/crypto/sha256_arm_shani.cpp (1 hunks)
  • src/init.cpp (1 hunks)
  • src/qt/askpassphrasedialog.cpp (3 hunks)
  • src/qt/bitcoin.cpp (1 hunks)
  • src/support/allocators/secure.h (1 hunks)
  • src/support/lockedpool.cpp (1 hunks)
  • src/support/lockedpool.h (1 hunks)
  • src/util/system.cpp (5 hunks)
  • src/util/system.h (2 hunks)
  • src/wallet/rpc/backup.cpp (2 hunks)
  • src/wallet/rpc/encrypt.cpp (4 hunks)
  • src/wallet/rpc/transactions.cpp (4 hunks)
  • src/wallet/rpc/wallet.cpp (1 hunks)
  • src/wallet/spend.cpp (1 hunks)
  • src/wallet/test/wallet_tests.cpp (1 hunks)
  • test/README.md (1 hunks)
  • test/functional/feature_block.py (23 hunks)
  • test/functional/p2p_disconnect_ban.py (2 hunks)
  • test/functional/rpc_psbt.py (1 hunks)
  • test/functional/wallet_abandonconflict.py (1 hunks)
  • test/functional/wallet_encryption.py (1 hunks)
  • test/functional/wallet_listdescriptors.py (3 hunks)
✅ Files skipped from review due to trivial changes (7)
  • src/support/allocators/secure.h
  • doc/descriptors.md
  • src/support/lockedpool.h
  • src/support/lockedpool.cpp
  • src/crypto/sha256_arm_shani.cpp
  • src/wallet/test/wallet_tests.cpp
  • src/wallet/rpc/wallet.cpp
🚧 Files skipped from review as they are similar to previous changes (19)
  • doc/release-notes-25158.md
  • doc/release-note-26194.md
  • doc/release-process.md
  • src/qt/bitcoin.cpp
  • test/functional/wallet_listdescriptors.py
  • test/functional/wallet_encryption.py
  • src/wallet/rpc/transactions.cpp
  • src/wallet/spend.cpp
  • test/functional/wallet_abandonconflict.py
  • test/functional/p2p_disconnect_ban.py
  • src/init.cpp
  • src/Makefile.qt.include
  • src/wallet/rpc/backup.cpp
  • src/qt/askpassphrasedialog.cpp
  • src/util/system.h
  • test/functional/feature_block.py
  • src/util/system.cpp
  • src/wallet/rpc/encrypt.cpp
  • test/functional/rpc_psbt.py
🧰 Additional context used
📓 Path-based instructions (1)
doc/**

📄 CodeRabbit Inference Engine (CLAUDE.md)

Unless specifically prompted, avoid making changes to the doc directory (documentation)

Files:

  • doc/release-notes-27068.md
🧠 Learnings (3)
📓 Common learnings
Learnt from: kwvg
PR: dashpay/dash#6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.
Learnt from: kwvg
PR: dashpay/dash#6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.
Learnt from: kwvg
PR: dashpay/dash#6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The `GetWallet()` function calls in `src/wallet/rpcwallet.cpp` are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.
Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to src/{test,wallet/test,qt/test}/**/*.{cpp,h,cc,cxx,hpp} : Unit tests for C++ code should be placed in src/test/, src/wallet/test/, or src/qt/test/ and use Boost::Test or Qt 5 for GUI tests
doc/release-notes-27068.md (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

test/README.md (1)

Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to test/functional/**/*.py : Functional tests should be written in Python and placed in test/functional/

🪛 LanguageTool
doc/release-notes-27068.md

[style] ~5-~5: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...ases may now contain null characters. Prior to this change, only characters up to the ...

(EN_WORDINESS_PREMIUM_PRIOR_TO)

test/README.md

[style] ~117-~117: Consider a more concise word here.
Context: ...p` directories for the functional tests in order to speed them up. Speed-up amount varies o...

(IN_ORDER_TO_PREMIUM)

🪛 markdownlint-cli2 (0.17.2)
test/README.md

120-120: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


145-145: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

@PastaPastaPasta PastaPastaPasta requested review from knst and kwvg July 29, 2025 14:01
Copy link

@UdjinM6 UdjinM6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

utACK 733c1fdeeeaf894ceefe02c16860fe37ea1fe1f0

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ec99c2f4fa289ff004af58618fba00c6088670ca: nit: merge it into original commit maybe

DashCoreAutoGuix and others added 6 commits July 29, 2025 10:23
4bbf5dd Detailed error message for passphrases with null chars (John Moffett)
b4bdabc doc: Release notes for 27068 (John Moffett)
4b1205b Test case for passphrases with null characters (John Moffett)
00a0861 Pass all characters to SecureString including nulls (John Moffett)

Pull request description:

  `SecureString` is a `std::string` specialization with a secure allocator. However, in practice it's treated like a C- string (no explicit length and null-terminated). This can cause unexpected and potentially insecure behavior. For instance, if a user enters a passphrase with embedded null characters (which is possible through Qt and the JSON-RPC), it will ignore any characters after the first null, potentially giving the user a false sense of security.

  Instead of assigning to `SecureString` via `std::string::c_str()`, assign it via a `std::string_view` of the original. This explicitly captures the size and still doesn't make any extraneous copies in memory.

  Note to reviewers, the following all compile identically in recent `GCC` (x86-64 and ARM64) with `-O2` (and `-std=c++17`):

  ```C++
  std::string orig_string;
  std::cin >> orig_string;
  SecureString s;
  s.reserve(100);
  // The following all compile identically
  s = orig_string;
  s = std::string_view{orig_string};
  s.assign(std::string_view{orig_string});
  s.assign(orig_string.data(), orig_string.size());
  ```

  So it's largely a matter of preference. However, one thing to keep in mind is that we want to avoid making unnecessary copies of any sensitive data in memory.

  Something like `SecureString s{orig_string};` is still invalid and probably unwanted in our case, since it'd get treated as a short string and optimized away from the secure allocator. I presume that's the reason for the `reserve()` calls.

  Fixes bitcoin#27067.

ACKs for top commit:
  achow101:
    re-ACK 4bbf5dd
  stickies-v:
    re-ACK [4bbf5dd](bitcoin@4bbf5dd)
  furszy:
    utACK 4bbf5dd

Tree-SHA512: 47a96905a82ca674b18076a20a388123beedf70e9de73e42574ea68afbb434734e56021835dd9b148cdbf61709926b487cc95e9021d9bc534a7c93b3e143d2f7

Co-authored-by: Andrew Chow <github@achow101.com>

fix: 27068 v21 -> v23
…category

Co-authored-by: MacroFake <falke.marco@gmail.com>
Co-authored-by: Claude Code <claude@anthropic.com>
… 0-fee

Co-authored-by: Andrew Chow <github@achow101.com>
Co-authored-by: Claude Code <claude@anthropic.com>
…unction

Co-authored-by: Andrew Chow <github@achow101.com>
…istdescriptors` and `importdescriptors`

Co-authored-by: Andrew Chow <github@achow101.com>
@PastaPastaPasta PastaPastaPasta force-pushed the backport-batch-jul-24-2025 branch from 733c1fd to 49a05e4 Compare July 29, 2025 15:23
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (4)
test/README.md (4)

115-118: Trim filler phrasing in the intro sentence.

The phrase “in order to” is verbose. A tighter alternative improves readability without losing meaning.

-If you have available RAM on your system you can create a RAM disk to use as the `cache` and `tmp` directories for the functional tests in order to speed them up.
+If you have available RAM you can create a RAM disk for the tests’ `cache` and `tmp` directories to speed them up.

120-122: Use a real heading instead of bold text – resolves MD036.

Bold text is flagged by markdown-lint as “emphasis used instead of a heading”.
Turn it into a sub-heading for proper structure and easier linking.

-**Linux**
+##### Linux

122-127: Minor fix: capital-case the size unit for consistency with mount(8).

Most mount examples (and mount itself) expect the size suffix in upper-case (4G).
Lower-case works on many systems but fails on some older util-linux builds.

-sudo mount -t tmpfs -o size=4g tmpfs /mnt/tmp/
+sudo mount -t tmpfs -o size=4G tmpfs /mnt/tmp/

145-148: macOS section: promote the label to a heading – same MD036 issue.

-**macOS**
+##### macOS
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 733c1fdeeeaf894ceefe02c16860fe37ea1fe1f0 and 49a05e4.

📒 Files selected for processing (16)
  • doc/release-note-26194.md (1 hunks)
  • doc/release-notes-27068.md (1 hunks)
  • src/init.cpp (1 hunks)
  • src/qt/askpassphrasedialog.cpp (3 hunks)
  • src/qt/bitcoin.cpp (1 hunks)
  • src/support/allocators/secure.h (1 hunks)
  • src/util/system.cpp (5 hunks)
  • src/util/system.h (2 hunks)
  • src/wallet/rpc/backup.cpp (2 hunks)
  • src/wallet/rpc/encrypt.cpp (4 hunks)
  • src/wallet/rpc/wallet.cpp (1 hunks)
  • src/wallet/spend.cpp (1 hunks)
  • test/README.md (1 hunks)
  • test/functional/rpc_psbt.py (1 hunks)
  • test/functional/wallet_encryption.py (1 hunks)
  • test/functional/wallet_listdescriptors.py (3 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/support/allocators/secure.h
🚧 Files skipped from review as they are similar to previous changes (13)
  • doc/release-note-26194.md
  • src/qt/bitcoin.cpp
  • test/functional/wallet_listdescriptors.py
  • src/util/system.h
  • src/wallet/rpc/wallet.cpp
  • src/init.cpp
  • test/functional/wallet_encryption.py
  • src/wallet/spend.cpp
  • src/wallet/rpc/backup.cpp
  • test/functional/rpc_psbt.py
  • src/wallet/rpc/encrypt.cpp
  • src/util/system.cpp
  • src/qt/askpassphrasedialog.cpp
🧰 Additional context used
📓 Path-based instructions (1)
doc/**

📄 CodeRabbit Inference Engine (CLAUDE.md)

Unless specifically prompted, avoid making changes to the doc directory (documentation)

Files:

  • doc/release-notes-27068.md
🧠 Learnings (3)
📓 Common learnings
Learnt from: kwvg
PR: dashpay/dash#6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.
Learnt from: kwvg
PR: dashpay/dash#6718
File: test/functional/test_framework/test_framework.py:2102-2102
Timestamp: 2025-06-09T16:43:20.996Z
Learning: In the test framework consolidation PR (#6718), user kwvg prefers to limit functional changes to those directly related to MasternodeInfo, avoiding scope creep even for minor improvements like error handling consistency.
Learnt from: kwvg
PR: dashpay/dash#6761
File: src/chainlock/signing.cpp:247-250
Timestamp: 2025-07-29T14:32:48.369Z
Learning: In PR #6761, kwvg acknowledged a null pointer check issue in ChainLockSigner::Cleanup() method but deferred it to follow-up, consistent with the pattern of avoiding scope creep in refactoring PRs.
Learnt from: kwvg
PR: dashpay/dash#6761
File: src/wallet/wallet.cpp:0-0
Timestamp: 2025-07-29T14:33:01.040Z
Learning: In refactoring PRs like #6761, kwvg acknowledges code safety improvements (like null pointer checks and unused parameter warnings) but prefers to defer them to follow-up PRs to maintain focus on the primary refactoring objectives, avoiding scope creep.
Learnt from: kwvg
PR: dashpay/dash#6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The `GetWallet()` function calls in `src/wallet/rpcwallet.cpp` are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.
Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to src/{test,wallet/test,qt/test}/**/*.{cpp,h,cc,cxx,hpp} : Unit tests for C++ code should be placed in src/test/, src/wallet/test/, or src/qt/test/ and use Boost::Test or Qt 5 for GUI tests
doc/release-notes-27068.md (1)

Learnt from: kwvg
PR: #6529
File: src/wallet/rpcwallet.cpp:3002-3003
Timestamp: 2025-02-14T15:19:17.218Z
Learning: The GetWallet() function calls in src/wallet/rpcwallet.cpp are properly validated with null checks that throw appropriate RPC errors, making additional validation unnecessary.

test/README.md (1)

Learnt from: CR
PR: dashpay/dash#0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to test/functional/**/*.py : Functional tests should be written in Python and placed in test/functional/

🪛 LanguageTool
doc/release-notes-27068.md

[style] ~5-~5: ‘Prior to’ might be wordy. Consider a shorter alternative.
Context: ...ases may now contain null characters. Prior to this change, only characters up to the ...

(EN_WORDINESS_PREMIUM_PRIOR_TO)

test/README.md

[style] ~117-~117: Consider a more concise word here.
Context: ...p` directories for the functional tests in order to speed them up. Speed-up amount varies o...

(IN_ORDER_TO_PREMIUM)

🪛 markdownlint-cli2 (0.17.2)
test/README.md

120-120: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)


145-145: Emphasis used instead of a heading

(MD036, no-emphasis-as-heading)

🔇 Additional comments (1)
doc/release-notes-27068.md (1)

4-6: Fix minor grammar and tighten wording

The phrase “Prior to” is verbose, and the singular/plural agreement in “null character were” is incorrect.
[ suggest_nitpick ]

-  Prior to this change, only characters up to the first
-  null character were recognized and accepted. (#27068)
+  Before this change, only the characters preceding the first
+  null character were recognized and accepted. (#27068)

@PastaPastaPasta PastaPastaPasta merged commit 9a35783 into dashpay:develop Jul 29, 2025
24 checks passed
newpass1.assign(ui->passEdit2->text().toStdString().c_str());
newpass2.assign(ui->passEdit3->text().toStdString().c_str());

oldpass.assign(std::string_view{ui->passEdit1->text().toStdString()});
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably 27068 is not full, see upgradetohd in src/wallet/rpc/wallet.cpp

    } else {
        // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string)
        // Alternately, find a way to make request.params[0] mlock()'d to begin with.
        secureWalletPassphrase = request.params[2].get_str().c_str();
    }


static bool InitSettings()
{
gArgs.EnsureDataDir();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

27073: need to pull 27176 as well (related docs update)

PastaPastaPasta added a commit that referenced this pull request Aug 4, 2025
…DirBase don't create datadir

c5b325a Merge bitcoin#27176: docs: GetDataDirNet and GetDataDirBase don't create datadir (fanquake)

Pull request description:

  ## Issue being fixed or feature implemented

  Since bitcoin#27073 (backported via #6780), the behaviour of `GetDataDir()` [changed](https://github.com/bitcoin/bitcoin/pull/27073/files#diff-19427b0dd1a791adc728c82e88f267751ba4f1c751e19262cac03cccd2822216L435-L443) to only return the datadir path, but not create it if non-existent. This also changed the behaviour of `GetDataDirNet()` and `GetDataDirBase()` but the docs do not yet reflect that.

  ## How Has This Been Tested?
  N/A

  ## Breaking Changes
  N/A

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] I have added or updated relevant unit/integration/functional/e2e tests
  - [x] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  UdjinM6:
    utACK c5b325a
  PastaPastaPasta:
    utACK c5b325a

Tree-SHA512: ff3fa0daea16ddc2d4140e65b7a02926fa2be9adebd6f756868ca985c49a9963950ba1ced1117b3ca289cdda6c7d44e72f51158ced1d3abb5e2f965b81f00896
PastaPastaPasta added a commit to PastaPastaPasta/dash that referenced this pull request Nov 4, 2025
Replace Bitcoin Core PR numbers (>7000) with their corresponding Dash Core
backport PR numbers in release notes:
- bitcoin#24098 -> dashpay#6784 (REST API endpoints)
- bitcoin#22650 -> dashpay#6569 (deprecatedrpc=addresses removal)
- bitcoin#22918 -> dashpay#6577 (getblock verbosity level 3)
- bitcoin#23093 -> dashpay#6577 (newkeypool RPC)
- bitcoin#24629 -> dashpay#6784 (pruneblockchain fix)
- bitcoin#25158 -> dashpay#6780 (abandoned field in wallet RPCs)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

RPC Some notable changes to RPC params/behaviour/descriptions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants