. #32407

pull AlnetharyT wants to merge 1 commits into bitcoin:master from AlnetharyT:master changing 213 files +2459 −6610
  1. AlnetharyT commented at 6:10 pm on May 2, 2025: none
    .
  2. النظاري (#1)
    * versionbits: Use std::array instead of C-style arrays
    
    * versionbits: Remove params from AbstractThresholdConditionChecker
    
    For an abstract class, specifying parameters in detail serves no point;
    and for the concrete implementation, changing the consensus parameters
    between invocations doesn't make sense. So simplify the class by removing
    the consensus params from the method arguments, and just make it a member
    variable in the concrete object where needed. This also allows dropping
    dummy parameters from the unit/fuzz tests.
    
    * test: chainstate write test for periodic chainstate flush
    
    * consensus/params: Move version bits period/threshold to bip9 param
    
    Rather than having the rule change period/threshold be constant for all
    potential deployments on a chain, have it be specific to the deployment
    itself. This both matches history (BIP 9 specified a 2016 block period
    and 1916 block threshold; BIP 91 specified a 336 block period and 269
    block threshold; and BIP 341 specified a 2016 block period and 1815
    block threshold), and allows the code to be simplified, as only the
    BIP9Deployment structure is needed, not the full Consensus::Params
    structure.
    
    * versionbits: Change BIP9Stats to uint32_t types
    
    * versionbits: Move WarningBits logic from validation to versionbits
    
    * versionbits: Move getdeploymentinfo logic to versionbits
    
    Rather than having the RPC code have knowledge about how BIP9 is
    implemented, create a reporting function in the versionbits code, and
    limit the RPC code to coverting the result of that into Univalue/JSON.
    
    * versionbits: Move BIP9 status logic for getblocktemplate to versionbits
    
    Rather than having the RPC code have knowledge about how BIP9 is
    implemented, create a reporting function in the versionbits code, and
    limit the RPC code to coverting the result of that into the appropriate
    output for getblocktemplate.
    
    * versionbits: Simplify VersionBitsCache API
    
    Replaces State() (which returned ACTIVE/STARTED/etc) with IsActiveAfter()
    which just returns a bool, as this was all State was actually used
    for. Drops Mask(), which was only used in tests and can be replaced with
    `1<<bit`, and also drops StateSinceHeight() and Statistics(), which are
    now only used internally for Info().
    
    * versionbits: Split out internal details into impl header
    
    * versionbits: Expose StateName function
    
    Rather than essentially duplicating StateName in the unit tests, expose
    it via the impl header.
    
    * versionbits: Expose VersionBitsConditionChecker via impl header
    
    * tests: refactor versionbits unit test
    
    Base the unit test directly on `VersionBitsConditionChecker`, slightly
    improving coverage, in particular adding coverage for the the logic
    regarding setting the TOP_BITS.
    
    * tests: refactor versionbits fuzz test
    
    Test `VersionBitsConditionChecker` behaviour directly, rather than
    reimplementing it, thus slightly improving fuzz test coverage of the
    real code.
    
    * wallet: doc: remove mentions of unavailable scrypt derivation method
    
    These comments are there since wallet encryption was first introduced
    (see commit 4e87d341f75f13bbd7d108c31c03886fbc4df56f, PR #352), but scrypt
    was actually never implemented as a derivation method.
    
    * wallet: refactor: introduce `CMasterKey::DEFAULT_DERIVE_ITERATIONS` constant
    
    This gets rid of the magic number used in both the `CMasterKey` ctor
    and the wallet encryption / passphrase change methods.
    
    * wallet: refactor: dedup master key encryption / derivation rounds setting
    
    * wallet: refactor: dedup master key decryption
    
    * scripted-diff: wallet: rename plain and encrypted master key variables
    
    -BEGIN VERIFY SCRIPT-
    sed -i s/_vMasterKey/plain_master_key/g ./src/wallet/wallet.cpp
    sed -i s/kMasterKey/master_key/g ./src/wallet/wallet.cpp
    sed -i "s/const MasterKeyMap::value_type& pMasterKey/const auto\& \[_, master_key\]/g" ./src/wallet/wallet.cpp
    sed -i s/pMasterKey\.second/master_key/g ./src/wallet/wallet.cpp
    sed -i "s/MasterKeyMap::value_type& pMasterKey/auto\& \[master_key_id, master_key\]/g" ./src/wallet/wallet.cpp
    sed -i s/pMasterKey\.first/master_key_id/g ./src/wallet/wallet.cpp
    -END VERIFY SCRIPT-
    
    * net: Use GetAdaptersAddresses to get local addresses on Windows
    
    Instead of a `gethostname` hack, use the official way of calling
    `GetAdaptersAddresses` to get local network addresses on Windows.
    
    As additional cleanup, move out `FromSockAddr` from MacOS and use it
    everywhere appropriate.
    
    Suggested by Ava Chow.
    
    * versionbits: docstrings for BIP9Info
    
    * test: add IsActiveAfter tests for versionbits
    
    * removed duplicate calling of GetDescriptorScriptPubKeyMan
    
    Removed duplicate call to GetDescriptorScriptPubKeyMan and
    Instead of checking linearly I have used find method so time complexity reduced significantly for GetDescriptorScriptPubKeyMan
    after this fix improved performance of importdescriptor part refs #32013.
    
    * build: Use `-z noseparate-code` on NetBSD < 11.0
    
    This can be dropped once Bitcoin Core no longer supports NetBSD 10.0 or
    if upstream fix is backported.
    
    NetBSD's dynamic linker ld.elf_so < 11.0 supports exactly 2 `PT_LOAD`
    segments and binaries linked with `-z separate-code` have 4 `PT_LOAD`
    segments.
    
    https://github.com/bitcoin/bitcoin/pull/28724#issuecomment-2589347934
    https://mail-index.netbsd.org/tech-userlevel/2023/01/05/msg013666.html
    
    * build: Drop option for disabling hardening
    
    Building unhardened executables is not a supported use case that should
    be maintained and those that want unhardened executables can still
    override them by appending disable flags.
    
    For example:
    
    cmake -B build -DAPPEND_CPPFLAGS='-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 -fno-stack-protector -fcf-protection=none -fno-stack-clash-protection' -DAPPEND_LDFLAGS='-Wl,-z,lazy -Wl,-z,norelro -Wl,-z,noseparate-code'
    
    * build: refactor: hardening flags -> core_interface
    
    * test: Ensures test fails if witness is not hex
    
    This commit ensures that we do not fail silently when the test script encounters a witness string in the JSON test data that can not be parsed as hex.
    
    * validation: fix traversal condition to mark BLOCK_FAILED_CHILD
    
    this block of code is not reached on master since other than
    initialisation, all other iterations have invalid_walk_tip
    and to_mark_failed pointers in some form of this layout
    where 1, 2, 3 and 4 are block heights.
    
    	invalid_walk_tip
    	  ↓
    1 <- 2 <- 3 <- 4
    	       ↑
    	      to_mark_failed
    
    fix it so that blocks are correctly marked as BLOCK_FAILED_CHILD
    if it's a descendant of BLOCK_FAILED_VALID block.
    
    * test: check BlockStatus when InvalidateBlock is used
    
    when a block is invalidated using InvalidateBlock, check that:
    1. it's status is BLOCK_FAILED_VALID
    2. it's children's status is BLOCK_FAILED_CHILD
       and not BLOCK_FAILED_VALID
    3. it's ancestors are valid
    
    * validation: correctly update BlockStatus for invalid block descendants
    
    invalid_block ----------> block_index
    
    - before this commit, only if block_index is not invalid, it will mark
      block_index as BLOCK_FAILED_CHILD
    - it's possible that block_index encountered is invalid and was marked
      as BLOCK_FAILED_VALID previously
    - in this case, correctly update BlockStatus of block_index by
      clearing BLOCK_FAILED_VALID and then setting it to BLOCK_FAILED_CHILD
    
    * validation: clarify final |= BLOCK_FAILED_VALID in InvalidateBlock
    
    This has no functional affect, as the any CBlockIndex*s which
    to_mark_failed is set to will already have been marked failed.
    
    Also prevents a situation where block already marked as
    BLOCK_FAILED_CHILD is again unconditionally marked as
    BLOCK_FAILED_VALID in the final |= BLOCK_FAILED_VALID.
    
    * build, msvc: Update vcpkg manifest baseline
    
    This change updates the vcpkg manifest baseline from the "2024.09.30
    Release" to the "2025.03.19 Release", with the following package
    changes:
     - boost: 1.85.0#1,2 --> 1.87.0
     - qtbase: 6.7.2#3 -> 6.8.2#1
     - qttools: 6.7.2#1 -> 6.8.2
     - sqlite3: 3.46.1 --> 3.49.1
    
    * build, msvc: Build only required `qtbase` features
    
    This change makes vcpkg skip unused features such as `dnslookup`,
    `openssl`, etc.
    
    * depends: Specify Objective C/C++ compilers for `native_qt` package
    
    This change fixes cross-compilation from macOS to macOS with another
    architecture.
    
    * depends: Fix `mv` command compatibility with macOS
    
    * wallet, rpc: Only allow keypool import from single key descriptors
    
    Legacy wallets should only import keys to the keypool if they came in a
    single key descriptor. Instead of relying on assumptions about the
    descriptor based on how many pubkeys show up after expanding the
    descriptor, explicitly mark descriptors as being single key type and use
    that for the check.
    
    * descriptor: Remove unused parent_info from BIP32PUbKeyProvider::GetPubKey
    
    * descriptors: Have GetPubKey fill origins directly
    
    Instead of having ExpandHelper fill in the origins in the
    FlatSigningProvider output, have GetPubKey do it by itself. This reduces
    the extra variables needed in order to track and set origins in
    ExpandHelper.
    
    Also changes GetPubKey to return a std::optional<CPubKey> rather than
    using a bool and output parameters.
    
    * descriptors: Move FlatSigningProvider pubkey filling to GetPubKey
    
    Instead of MakeScripts inconsistently filling the output
    FlatSigningProvider with the pubkeys involved, just do it in GetPubKey.
    
    * descriptors: Have GetPrivKey fill keys directly
    
    Instead of GetPrivKey returning a key and having the caller fill the
    FlatSigningProvider, have GetPrivKey take the FlatSigningProvider and
    fill it by itself. This will be necessary for descriptors such as
    musig() where there are private keys that need to be added to the
    FlatSigningProvider but do not directly appear in any resulting scripts.
    
    GetPrivKey is now changed to void as the caller no longer cares whether
    it succeeds or fails.
    
    * Log block header in net_processing
    
    Previously ChainstateManager::AcceptBlockHeader would log when it
    saw a new header. This commit moves logging to the call site(s) in
    net_processing. The next commits will then log which peer sent it
    and whether it was part of a compact block.
    
    This commit changes behavior:
    - when multiple headers are received in a single message, only the
      last one is logged
    - if any of the headers are invalid, the valid ones are not logged
    
    This happens because net_processing calls ProcessNewBlockHeaders
    with multiple headers, which then calls AcceptBlockHeader one
    header at a time.
    
    Additionally:
    - when the header is received via a compact block, there's no more
      duplicate log (a later commit also unifies logging code paths)
    
    * Log which peer sent us a header
    
    This also supports -logips.
    
    * Use LogBlockHeader for compact blocks
    
    The only behavior change is that the block height is now added to the log message.
    
    * doc: release note for #27826
    
    * torcontrol: Fix addrOnion outdate comment
    
    Signed-off-by: Eval EXEC <execvy@gmail.com>
    
    * guix: Remove unused `file` package
    
    The `file` utility has not been required since Guix builds were
    introduced.
    
    * rpc: Allow fullrbf fee bump
    
    Also, fix the incorrect documention of the 'replaceable' RPC argument
    with respect to sequence number handling. The docs were incorrect
    before, so the fix could be extracted, but it seems fine to include here
    as well.
    
    * doc: Add deps install notes for multiprocess
    
    These just mirror the content in src/ipc/libmultiprocess/doc/install.md
    
    * feefrac: avoid integer overflow in temporary
    
    * psbt: Implement un/ser of musig2 fields
    
    * rpc: Include MuSig2 fields in decodepsbt
    
    * tests: Add BIP 373 test vectors
    
    * ci: Temporarily disable `WalletMigration` benchmark
    
    * ci: Drop no longer necessary `-Wno-error=array-bounds`
    
    * test: improves tapscript unit tests
    
    This commit creates new test utilities for future Taproot script
    tests within script_tests.json. The key features of this commit are the
    addition of three new tags: `#SCRIPT#`, `#CONTROLBLOCK#`, and
    `#TAPROOTOUTPUT#`. These tags streamline the test creation process by
    eliminating the need to manually generate these components outside the
    test suite.
    
    * `#SCRIPT#`: Parses Tapscript and outputs a byte string of opcodes.
    * `#CONTROLBLOCK#`: Automatically generates the control block for a given
    Taproot output.
    * `#TAPROOTOUTPUT#`: Generates the final Taproot scriptPubKey.
    
    Update src/test/script_tests.cpp
    
    Co-authored-by: Jan B <608446+janb84@users.noreply.github.com>
    
    * fuzz: enable running fuzz test cases in Debug mode
    
    When building with
    
     BUILD_FOR_FUZZING=OFF
     BUILD_FUZZ_BINARY=ON
     CMAKE_BUILD_TYPE=Debug
    
    allow the fuzz binary to execute given test cases (without actual
    fuzzing) to make it easier to reproduce fuzz test failures in a more
    normal debug build.
    
    In Debug builds, deterministic fuzz behaviour is controlled via a runtime
    variable, which is normally false, but set to true automatically in the
    fuzz binary, unless the FUZZ_NONDETERMINISM environment variable is set.
    
    * doc: Document fuzz build options
    
    Co-Authored-By: Ryan Ofsky <ryan@ofsky.org>
    
    * bench: clean up migrated descriptor wallets via loader teardown
    
    `MigrateLegacyToDescriptor` returns both a spendable descriptor wallet and a watch‑only wallet.
    If these remain attached, their files stay open and on Windows this can hang CI when removing the test directory.
    
    By constructing them via `MakeWalletLoader` (which owns the `WalletContext`), both wallets are automatically unloaded when the loader is destroyed at the end.
    This ensures no lingering handles or resource leaks when running the benchmark on CI with `-sanity-check`.
    
    Co-authored-by: furszy <matiasfurszyfer@protonmail.com>
    
    * ci: re-enable all benchmark runs
    
    Drop the temporary `-filter` that excluded the `WalletMigration` benchmark.
    
    * bench: ensure wallet migration benchmark runs exactly once
    
    The migration benchmark crashes if run more than once, because of `std::move(wallet)` and leaves subsequent iterations in an undefined state - avoiding `UndefinedBehaviorSanitizer` null‑dereference error.
    
    * refactor: starts/ends_with changes for clang-tidy 20
    
    * ci: clang-tidy 20
    
    * ci: Add missing -Wno-error=array-bounds to valgrind fuzz
    
    * test: Add missing check for empty stderr in util tester
    
    * test: Run all benchmarks in the sanity check
    
    * tests, gui: Use descriptors watchonly wallet for watchonly test
    
    * test: Remove legacy wallet unit tests
    
    * test: wallet_signer.py bdb will be removed
    
    * test: Remove legacy wallet tests from wallet_backwards_compatibility.py
    
    * test: Remove legacy wallet tests from wallet_reindex.py
    
    * test: remove legacy wallet functional tests
    
    Removes all legacy wallet specific functional tests.
    
    Also removes the --descriptor and --legacy-wallet options as these are
    no longer necessary with the legacy wallet removed.
    
    * wallet: Remove -format and bdb from wallet tool's createfromdump
    
    * wallet: Remove wallettool salvage
    
    Salvage is bdb only which is about to be removed.
    
    * bench: Remove WalletLoadingLegacy benchmark
    
    * wallet: Disallow legacy wallet creation from the wallet tool
    
    * wallet: Disallow creating legacy wallets
    
    Remove the option to set descriptors=False when creating a wallet, and
    enforce this in RPC and in CreateWallet
    
    * wallet: Disallow loading legacy wallets
    
    Legacy wallets do not have the descriptors flag set. Don't load wallets
    without the descriptors flag.
    
    At the same time, we will no longer load BDB databases since they are
    only used for legacy wallets.
    
    * test: Add imports for util bpf_cflags
    
    This is required for the next commit.
    
    * scripted-diff: Use bpf_cflags
    
    -BEGIN VERIFY SCRIPT-
    
     ren() { sed --regexp-extended -i "s/$1/$2/g" $( git grep --extended-regexp -l "$1" ) ; }
    
     ren 'cflags=\["-Wno-error=implicit-function-declaration"\]' 'cflags=bpf_cflags()'
    
    -END VERIFY SCRIPT-
    
    * qt: Replace stray tfm::format to cerr with qWarning
    
    GUI warnings should go to the log, not to the console (which may not be
    connected at all).
    
    * Fix failing util_time_GetTime test on Windows
    
    Remove unreliable steady clock time checking from the test that was causing
    CI failures primarily on Windows. The test previously tried to verify that
    steady_clock time increases after a 1ms sleep, but this approach is not reliable
    on all platforms where such a short sleep interval may not consistently result
    in observable clock changes.
    
    This addresses issue #32197 where the test was reporting failures in the
    cross-built Windows CI environment. As noted in the discussion, the test is not
    critical to the functionality of Bitcoin Core, and removing the unreliable part
    is the most straightforward solution.
    
    Rename and refocus util_time_GetTime test to util_mocktime
    
    Co-Authored-By: maflcko <6399679+maflcko@users.noreply.github.com>
    
    * gui: crash fix, disconnect numBlocksChanged() signal during shutdown
    
    The crash stems from the order of the shutdown procedure:
    We first unset the client model, then destroy the wallet controller—but we leave
    the internal wallet models ('m_wallets') untouched for a brief period. As a result,
    there’s a point in time where views still have connected signals and access to
    wallet models that are not connected to any wallet controller.
    Now.. since the clientModel is only replaced with nullptr locally and not destroyed
    yet, signals like numBlocksChanged can still emit. Thus, when wallet views receive
    them, they see a non-null wallet model ptr, and proceed to call backend functions
    from a model that is being torn down.
    
    As the shutdown procedure begins by unsetting clientModel from all views. It’s safe
    to ignore events when clientModel is nullptr.
    
    * net: remove unnecessary check from AlreadyConnectedToAddress()
    
    `CConnman::AlreadyConnectedToAddress()` searches the existent nodes by
    address or by address-and-port:
    
    ```cpp
    FindNode(static_cast<CNetAddr>(addr)) || FindNode(addr.ToStringAddrPort())
    ```
    
    but:
    
    * if there is a match by just the address, then the address-and-port
      search will not be evaluated and the whole condition will be `true`
    * if the there is no node with the same address, then the second search
      by address-and-port will not find a match either.
    
    The search by address-and-port is comparing against `CNode::m_addr_name`
    which could be a hostname, e.g. `"node.foobar.com:8333"`, but
    `addr.ToStringAddrPort()` is always going to be numeric.
    
    * test: Same addr, diff port is already connected
    
    * test: Slim down previous releases bdb check
    
    * tests: Test migration cleans up bad inactive chain derivation path
    
    A bug in 0.21.x and 22.x resulted in some wallets having invalid
    derivation paths that are the concatenation of two derivation paths.
    These appear only when inactive hd chains are topped up.
    
    Since key metadata is a legacy wallet only record, migrating legacy
    wallets to descriptor wallets will fix this issue as all key metadata
    records are deleted. The derivation path information is derived
    on-the-fly from the descriptor that is produced for the inactive hd
    chain.
    
    Thus we only need a test to verify that the derivation paths are good,
    and that all key metadata records are deleted from the migrated wallet.
    
    * doc: Fix fuzz test_runner.py path
    
    This commit fixes the path listed in the documentation for the fuzz
    testing test_runner.py. Previously the --help option worked but running
    fuzz tests from the documented path did not.
    
    * Bugfix: Miner: Don't reuse block_reserved_weight for "block is full enough to give up" weight delta
    
    PR #30356 incorrectly changed a constant of `4000` to `m_options.coinbase_max_additional_weight` in the check for when to give up finding another transaction to fill the block:
    
    ```diff
                 if (nConsecutiveFailed > MAX_CONSECUTIVE_FAILURES && nBlockWeight >
    -                    m_options.nBlockMaxWeight - 4000) {
    +                    m_options.nBlockMaxWeight - m_options.block_reserved_weight) {
                     // Give up if we're close to full and haven't succeeded in a while
                     break;
                 }
    ```
    
    But this constant did not deal with the reserved weight at all. It was in fact simply checking if the block was close to full, and if so, giving up finding another transaction to pad it with after `MAX_CONSECUTIVE_FAILURES` failed attempts.
    
    It doesn't seem very logical to reuse the reserve weight for this purpose, and it would be overcomplicated to add yet another setting, so this PR changes it to a new constexpr.
    
    * depends: Fix cross-compiling `qt` package from macOS to Windows
    
    * test: Remove unused RPCOverloadWrapper is_cli field
    
    * test: Remove unused createwallet_passthrough
    
    * test: Force named args for RPCOverloadWrapper optional args
    
    This can avoid bugs and makes the test code easier to read, because the
    order of positional args does not have to be known or assumed.
    
    * test: avoid stack overflow in `FindChallenges` via manual iteration
    
    The original recursive `FindChallenges` explores the Miniscript node tree using depth-first search. Specifically, it performs a pre-order traversal (processing the node's data, then recursively visiting children from left-to-right). This recursion uses the call stack, which can lead to stack overflows on platforms with limited stack space, particularly noticeable in Windows debug builds.
    
    This change replaces the recursive implementation with an iterative version using an explicit stack. The iterative version also performs a depth-first search and processes the node's data before exploring children (preserving pre-order characteristics), although the children are explored in right-to-left order due to the LIFO nature of the explicit stack.
    Critically, both versions collect challenges into a `std::set`, which automatically deduplicates and sorts elements. This ensures that not only the final result, but the actual state of the set at any equivalent point in traversal remains identical, despite the difference in insertion order.
    
    This iterative approach is an alternative to increasing the default stack size (as proposed in #32349) and directly addresses the stack overflow issue reported in #32341 by avoiding deep recursion.
    
    The change is done in two commits:
    * add a new iterative `FindChallenges` method and rename the old method to `*_recursive` (to simplify removal in the next commit), asserting that its result matches the original;
    * Remove the original recursive implementation.
    
    This approach avoids needing to suppress `misc-no-recursion` warnings and provides a portable, low-risk fix.
    
    Using a `std::set` is necessary for deduplication, matching the original function's behavior. An experiment using an `std::vector` showed duplicate challenges being added, confirming the need for the set:
    Example failure with vector:
      Recursive (set):
        (6, 9070746)
        (6, 19532513)
        (6, 3343376967)
      Iterative (vector attempt):
        (6, 19532513)
        (6, 9070746)
        (6, 3343376967)
        (6, 9070746) // Duplicate
    
    Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
    
    * test: remove old recursive `FindChallenges_recursive` implementation
    
    The performance of the test is the same as before, with the recursive method.
    
    * refactor: simplify repeated comparisons in `FindChallenges`
    
    This obviates that the LHS of the comparison is always the same
    
    * refactor: Fix Sonar rule `cpp:S4998` - avoid unique_ptr const& as parameter
    
    Changed `FindChallenges()` parameter from `const std::unique_ptr<const Node<Key>>&` to const `Node*`.
    
    Sonar rule `cpp:S4998` - https://sonarcloud.io/project/issues?issueStatuses=OPEN%2CCONFIRMED&branch=32351-8c0e673c4ac31c1c04750756de749fb813b2c33f&id=aureleoules_bitcoin&open=AZZ2q88IvFhp-eMuMy96:
    > Replace this use of "unique_ptr" by a raw pointer or a reference (possibly const).
    > Function parameters should not be of type "std::unique_ptr<T> const &" cpp:S4998
    > Software qualities impacted: Maintainability
    
    * descriptors: Reject + sign in ParseKeyPathNum
    
    * descriptors: Reject + sign when parsing multi threshold
    
    * test: [refactor] Use ToIntegral in CheckInferDescriptor
    
    * test: Use the correct node for doubled keypath test
    
    * util: Remove `fsbridge::get_filesystem_error_message()`
    
    The `fsbridge::get_filesystem_error_message()` function exhibits several
    drawbacks:
    
    1. It was introduced in https://github.com/bitcoin/bitcoin/pull/14192 to
    account for platform-specific variations in
    `boost::filesystem::filesystem_error::what()`. Since migrating to
    `std::filesystem`, those discrepancies no longer exist.
    
    2. It fails to display UTF-8 paths correctly on Windows.
    
    3. It relies on `std::wstring_convert`, which was deprecated in C++17
    and removed in C++26.
    
    This change removes the `fsbridge::get_filesystem_error_message()`
    function, thereby resolving all of the above issues.
    
    Additionally, filesystem error messages now use the "Warning" log level.
    
    * validation: write chainstate to disk every hour
    
    Remove the 24 hour periodic flush interval and
    write the chainstate along with blocks and block
    index every hour
    
    * refactor: rename fDoFullFlush to should_write
    
    * refactor: replace m_last_write with m_next_write
    
    Co-Authored-By: l0rinc <pap.lorinc@gmail.com>
    
    * validation: add randomness to periodic write interval
    
    Co-Authored-By: Pieter Wuille <pieter@wuille.net>
    Co-Authored-By: l0rinc <pap.lorinc@gmail.com>
    
    * doc: Fix test_bitcoin path
    
    This commit fixes a couple command paths for interacting with the
    test_bitcoin binary within the Unit Test documentation.
    
    ---------
    
    Signed-off-by: Eval EXEC <execvy@gmail.com>
    Co-authored-by: Anthony Towns <aj@erisian.com.au>
    Co-authored-by: Andrew Toth <andrewstoth@gmail.com>
    Co-authored-by: Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
    Co-authored-by: laanwj <126646+laanwj@users.noreply.github.com>
    Co-authored-by: Saikiran <saikirannadipilli@gmail.com>
    Co-authored-by: David Gumberg <davidzgumberg@gmail.com>
    Co-authored-by: Ethan Heilman <ethan.r.heilman@gmail.com>
    Co-authored-by: stratospher <44024636+stratospher@users.noreply.github.com>
    Co-authored-by: Matt Corallo <git@bluematt.me>
    Co-authored-by: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com>
    Co-authored-by: Ava Chow <github@achow101.com>
    Co-authored-by: Sjors Provoost <sjors@sprovoost.nl>
    Co-authored-by: Eval EXEC <execvy@gmail.com>
    Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
    Co-authored-by: TheCharlatan <seb.kung@gmail.com>
    Co-authored-by: Pieter Wuille <pieter@wuille.net>
    Co-authored-by: merge-script <gloriajzhao@gmail.com>
    Co-authored-by: Jan B <608446+janb84@users.noreply.github.com>
    Co-authored-by: Ryan Ofsky <ryan@ofsky.org>
    Co-authored-by: Lőrinc <pap.lorinc@gmail.com>
    Co-authored-by: furszy <matiasfurszyfer@protonmail.com>
    Co-authored-by: merge-script <fanquake@gmail.com>
    Co-authored-by: VolodymyrBg <aqdrgg19@gmail.com>
    Co-authored-by: maflcko <6399679+maflcko@users.noreply.github.com>
    Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
    Co-authored-by: monlovesmango <monlovesmango@users.noreply.github.com>
    Co-authored-by: Luke Dashjr <luke-jr+git@utopios.org>
    5a1669f648
  3. DrahtBot commented at 6:10 pm on May 2, 2025: contributor

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

    Code Coverage & Benchmarks

    For details see: https://corecheck.dev/bitcoin/bitcoin/pulls/32407.

    Reviews

    See the guideline for information on the review process. A summary of reviews will appear here.

  4. fanquake closed this on May 2, 2025

  5. achow101 renamed this:
    النظاري (#1)
    .
    on May 2, 2025
  6. bitcoin locked this on May 2, 2025

github-metadata-mirror

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

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