fuzz: wallet: add target for `TransactionCanBeBumped` #33916

pull brunoerg wants to merge 1 commits into bitcoin:master from brunoerg:2025-11-fuzz-wallet-feebumper changing 4 files +188 −2
  1. brunoerg commented at 2:07 PM on November 20, 2025: contributor

    This PR adds a fuzz target for the TransactionCanBeBumped function. This function checks if a transaction can be bumped based on:

    1. Transaction has descendants in the wallet.
    2. Transaction has descendants in the mempool.
    3. Transaction has been mined.
    4. Transaction was already bumped.
    5. Transaction has inputs that are not mine.

    This target will create scenarios to exercise all these cases. For the scenario (2), it has a mocked CTxMemPool that has a function to update the descendant state on mempool - this way we can speed up the target by avoiding to interacting with the mempool to really create descedants (e.g. creating blocks to trigger it).

    Also, the CheckTransaction calls are to avoid UB on SetSpentKeyState - e.g. by calling it with a transaction without any output.

  2. DrahtBot added the label Tests on Nov 20, 2025
  3. DrahtBot commented at 2:07 PM on November 20, 2025: contributor

    <!--e57a25ab6845829454e8d69fc972939a-->

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

    <!--006a51241073e994b41acfe9ec718e94-->

    Code Coverage & Benchmarks

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

    <!--021abf342d371248e50ceaed478a90ca-->

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    Stale ACK janb84

    If your review is incorrectly listed, please copy-paste <code>&lt;!--meta-tag:bot-skip--&gt;</code> into the comment that the bot should ignore.

    <!--5faf32d7da4f0f540f40219e4f7537a3-->

  4. fanquake added the label Fuzzing on Nov 20, 2025
  5. brunoerg commented at 2:13 PM on November 20, 2025: contributor

    Coverage report is available at: https://brunoerg.xyz/bitcoin-core-coverage/33916/

  6. janb84 commented at 1:34 PM on November 24, 2025: contributor

    ACK 2df9f10755ea7de94ecc9a17e6dd6dc89de0a637

    PR adds new fuzzing target. Target wallet_tx_can_be_bumped.

    Ran fuzzer for 2 hours without issues, Codecoverage equals to what is reported. New Target is NOT deterministic, but I'm also not sure what to change to make it deterministic (if it's even feasible)

    This fuzzer increases fuzzing coverage :

    | Totals master: | 69.81% (5082/7280) | 41.91% (10784/25729) | 62.64% (57301/91479) | 56.83% (39387/69312) | 56.96% (21311/37411) -- | -- | -- | -- | -- | -- |Totals this PR| 70.58% (5142/7285) | 42.32% (10893/25742) | 63.09% (57787/91592) | 57.34% (39758/69343) | 57.28% (21428/37411)

    Big improvement area's:

    <details>

    master |src/wallet/transaction.cpp | 0.00% (0/6) | 0.00% (0/6) | 0.00% (0/41) | 0.00% (0/20) | 0.00% (0/16) -- | -- | -- | -- | -- | -- | -- | this PR | src/wallet/transaction.cpp | 33.33% (2/6) | 33.33% (2/6) | 41.46% (17/41) | 30.00% (6/20) | 31.25% (5/16)

    | master | src/wallet/transaction.h | 5.88% (3/51) | 2.42% (3/124) | 8.54% (14/164) | 6.45% (8/124) | 0.00% (0/42) -- | -- | -- | -- | -- | -- | -- | this PR |src/wallet/transaction.h | 49.02% (25/51) | 29.03% (36/124) | 50.61% (83/164) | 36.29% (45/124) | 4.76% (2/42)

    | master | src/wallet/wallet.cpp | 15.31% (32/209) | 15.17% (32/211) | 8.55% (273/3192) | 7.76% (239/3079) | 6.31% (97/1538) -- | -- | -- | -- | -- | -- | -- | this PR | src/wallet/wallet.cpp | 24.88% (52/209) | 24.64% (52/211) | 15.32% (489/3192) | 14.58% (449/3079) | 11.96% (184/1538)

    master src/wallet/wallet.h 37.14% (13/35) 24.14% (14/58) 36.26% (33/91) 24.84% (39/157) 18.37% (9/49)
    this PR src/wallet/wallet.h 40.00% (14/35) 29.31% (17/58) 41.76% (38/91) 30.57% (48/157) 20.41% (10/49)

    | master | src/wallet/walletdb.cpp | 15.66% (13/83) | 15.66% (13/83) | 4.77% (67/1404) | 4.38% (28/639) | 4.87% (15/308) -- | -- | -- | -- | -- | -- | -- | this PR | src/wallet/walletdb.cpp | 19.28% (16/83) | 19.28% (16/83) | 5.48% (77/1404) | 5.16% (33/639) | 5.19% (16/308)

    | master | src/wallet/walletdb.h | 33.33% (4/12) | 28.21% (11/39) | 31.03% (18/58) | 22.58% (7/31) | 10.00% (1/10) -- | -- | -- | -- | -- | -- | -- | this PR | src/wallet/walletdb.h | 33.33% (4/12) | 35.90% (14/39) | 31.03% (18/58) | 22.58% (7/31) | 10.00% (1/10)

    </details>

  7. in src/wallet/test/fuzz/feebumper.cpp:37 in 2df9f10755
      32 | +    g_setup = testing_setup.get();
      33 | +}
      34 | +
      35 | +TxState ConsumeTxState(FuzzedDataProvider& fdp) {
      36 | +    TxState state = TxStateInactive{
      37 | +        /*abandoned=*/fdp.ConsumeBool()
    


    maflcko commented at 9:48 AM on November 26, 2025:

    missing trailing comma?


    brunoerg commented at 4:28 PM on November 26, 2025:

    Done

  8. in src/wallet/test/fuzz/feebumper.cpp:35 in 2df9f10755
      30 | +{
      31 | +    static const auto testing_setup = MakeNoLogFileContext<TestingSetup>();
      32 | +    g_setup = testing_setup.get();
      33 | +}
      34 | +
      35 | +TxState ConsumeTxState(FuzzedDataProvider& fdp) {
    


    maflcko commented at 9:48 AM on November 26, 2025:

    clang format new code?


    brunoerg commented at 4:28 PM on November 26, 2025:

    Done

  9. DrahtBot added the label CI failed on Nov 26, 2025
  10. DrahtBot commented at 10:02 AM on November 26, 2025: contributor

    <!--85328a0da195eb286784d51f73fa0af9-->

    🚧 At least one of the CI tasks failed. <sub>Task previous releases: https://github.com/bitcoin/bitcoin/actions/runs/19539609660/job/56432179681</sub> <sub>LLM reason (✨ experimental): Compilation failed: missing member UpdateDescendantState in CTxMemPoolEntry (feebumper.cpp) causing fuzz target build error.</sub>

    <details><summary>Hints</summary>

    Try to run the tests locally, according to the documentation. However, a CI failure may still happen due to a number of reasons, for example:

    • Possibly due to a silent merge conflict (the changes in this pull request being incompatible with the current code in the target branch). If so, make sure to rebase on the latest commit of the target branch.

    • A sanitizer issue, which can only be found by compiling with the sanitizer and running the affected test.

    • An intermittent issue.

    Leave a comment here, if you need help tracking down a confusing failure.

    </details>

  11. maflcko commented at 10:05 AM on November 26, 2025: member

    needs rebase

  12. brunoerg force-pushed on Nov 26, 2025
  13. brunoerg commented at 4:30 PM on November 26, 2025: contributor

    Force-pushed 2df9f10755ea7de94ecc9a17e6dd6dc89de0a637..52101d8809062d524393ebfde20c926d36fe5bf8:

  14. DrahtBot removed the label CI failed on Nov 26, 2025
  15. sedited requested review from janb84 on Mar 16, 2026
  16. sedited requested review from marcofleon on Mar 19, 2026
  17. sedited requested review from marcofleon on Mar 19, 2026
  18. in src/wallet/test/fuzz/feebumper.cpp:122 in 52101d8809 outdated
     117 | +            CAmount n_value{ConsumeMoney(fuzzed_data_provider, /*max=*/MAX_MONEY)};
     118 | +            tx.vout[0].nValue = n_value;
     119 | +            tx.vout[0].scriptPubKey = GetScriptForDestination(fuzzed_wallet.GetDestination(fuzzed_data_provider));
     120 | +            txid_to_spend = tx.GetHash();
     121 | +        }
     122 | +        (void)fuzzed_wallet.wallet->AddToWallet(MakeTransactionRef(tx), tx_state);
    


    marcofleon commented at 4:55 PM on May 13, 2026:

    Add a CheckTransaction before this line too?


    brunoerg commented at 6:19 PM on May 18, 2026:

    Yes, nice catch. Thanks.

  19. marcofleon commented at 4:55 PM on May 13, 2026: contributor

    <details> <summary>stack trace</summary>

    New crash id='634d66ecc60e964ed9bba85b934f9baa7a64e5a3' (project='bitcoin' harness='wallet_tx_can_be_bumped')
    Base64: Dv//AAAAAAAAAAEBABEAagAAAAAAAQEBALoAAQEAAAACAP8OAAAAAAAAAP9c+moAAAAAAAEBAQC6AAEBAAAAAgD/DgAAAAAAAAD/XPqhjQABAWnO4OVM4tnfVRhWW7nTooVXibgrN5NPkWxNBpYUnwaLLAAAAAAAAAABACEBEQBdAQAAAAACBAJc/////////wf6obkn+QAECgS5Jlx++QEAAAcANv8AAAD/////////////////////////////Sg==
    ===== stack trace ===== 
    INFO: Running with entropic power schedule (0xFF, 100).
    INFO: Seed: 3031401414
    INFO: Loaded 1 modules   (450738 inline 8-bit counters): 450738 [0x55a9d32cb070, 0x55a9d3339122), 
    INFO: Loaded 1 PC tables (450738 PCs): 450738 [0x55a9d3339128,0x55a9d3a19c48), 
    /workdir/out/libfuzzer_asan/fuzz: Running 1 inputs 1 time(s) each.
    Running: /workdir/workspace/solutions/crash-1234378e4f8fc81e7ee93ee27fc4e2b593a2d6c6
    =================================================================
    ==27852==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x7b695871ecbc at pc 0x55a9d2e1fdc0 bp 0x7ffe5e37ef80 sp 0x7ffe5e37ef78
    READ of size 4 at 0x7b695871ecbc thread T0 (b-test)
        [#0](/github-metadata-backup-bitcoin-bitcoin/0/) 0x55a9d2e1fdbf in CScript::IsPayToScriptHash() const script.cpp
        [#1](/github-metadata-backup-bitcoin-bitcoin/1/) 0x55a9d19df908 in Solver(CScript const&, std::vector<std::vector<unsigned char, std::allocator<unsigned char>>, std::allocator<std::vector<unsigned char, std::allocator<unsigned char>>>>&) solver.cpp
        [#2](/github-metadata-backup-bitcoin-bitcoin/2/) 0x55a9d16187fc in ExtractDestination(CScript const&, std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>&) addresstype.cpp
        [#3](/github-metadata-backup-bitcoin-bitcoin/3/) 0x55a9d20a7672 in wallet::CWallet::SetSpentKeyState(wallet::WalletBatch&, transaction_identifier<false> const&, unsigned int, bool, std::set<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>, std::less<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>, std::allocator<std::variant<CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown>>>&) wallet.cpp
        [#4](/github-metadata-backup-bitcoin-bitcoin/4/) 0x55a9d20a9358 in wallet::CWallet::AddToWallet(std::shared_ptr<CTransaction const>, std::variant<wallet::TxStateConfirmed, wallet::TxStateInMempool, wallet::TxStateBlockConflicted, wallet::TxStateInactive, wallet::TxStateUnrecognized> const&, std::function<bool (wallet::CWalletTx&, bool)> const&, bool) wallet.cpp
        [#5](/github-metadata-backup-bitcoin-bitcoin/5/) 0x55a9d156e376 in wallet::(anonymous namespace)::wallet_tx_can_be_bumped_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>) feebumper.cpp
        [#6](/github-metadata-backup-bitcoin-bitcoin/6/) 0x55a9d15ceeb7 in LLVMFuzzerTestOneInput fuzz.cpp
        [#7](/github-metadata-backup-bitcoin-bitcoin/7/) 0x55a9d0d80b7b in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:619:13
        [#8](/github-metadata-backup-bitcoin-bitcoin/8/) 0x55a9d0d6a822 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) /llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:329:6
        [#9](/github-metadata-backup-bitcoin-bitcoin/9/) 0x55a9d0d706c0 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:864:9
        [#10](/github-metadata-backup-bitcoin-bitcoin/10/) 0x55a9d0d9d392 in main /llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10
        [#11](/github-metadata-backup-bitcoin-bitcoin/11/) 0x7f2959447ca7  (/lib/x86_64-linux-gnu/libc.so.6+0x29ca7) (BuildId: 58749c528985eab03e6700ebc1469fa50aa41219)
        [#12](/github-metadata-backup-bitcoin-bitcoin/12/) 0x7f2959447d64 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29d64) (BuildId: 58749c528985eab03e6700ebc1469fa50aa41219)
        [#13](/github-metadata-backup-bitcoin-bitcoin/13/) 0x55a9d0d63810 in _start (/workdir/out/libfuzzer_asan/fuzz+0x1390810)
    
    0x7b695871ecbc is located 1929 bytes after 35-byte region [0x7b695871e510,0x7b695871e533)
    allocated by thread T0 (b-test) here:
        [#0](/github-metadata-backup-bitcoin-bitcoin/0/) 0x55a9d0ee60bd in operator new(unsigned long) /llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:109:35
        [#1](/github-metadata-backup-bitcoin-bitcoin/1/) 0x55a9d222a415 in std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&>(std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&) util.cpp
        [#2](/github-metadata-backup-bitcoin-bitcoin/2/) 0x55a9d222a2af in std::_Rb_tree_node<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>* std::_Rb_tree<std::vector<std::byte, zero_after_free_allocator<std::byte>>, std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>, std::_Select1st<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>, std::less<void>, std::allocator<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>>::_M_create_node<std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&>(std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&) util.cpp
        [#3](/github-metadata-backup-bitcoin-bitcoin/3/) 0x55a9d2229f44 in std::_Rb_tree_iterator<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>> std::_Rb_tree<std::vector<std::byte, zero_after_free_allocator<std::byte>>, std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>, std::_Select1st<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>, std::less<void>, std::allocator<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>>::_M_emplace_hint_unique<std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&>(std::_Rb_tree_const_iterator<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>, std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&) util.cpp
        [#4](/github-metadata-backup-bitcoin-bitcoin/4/) 0x55a9d22220aa in std::pair<std::_Rb_tree_iterator<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>, bool> std::map<std::vector<std::byte, zero_after_free_allocator<std::byte>>, std::vector<std::byte, zero_after_free_allocator<std::byte>>, std::less<void>, std::allocator<std::pair<std::vector<std::byte, zero_after_free_allocator<std::byte>> const, std::vector<std::byte, zero_after_free_allocator<std::byte>>>>>::emplace<std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&>(std::vector<std::byte, zero_after_free_allocator<std::byte>>&, std::vector<std::byte, zero_after_free_allocator<std::byte>>&) util.cpp
        [#5](/github-metadata-backup-bitcoin-bitcoin/5/) 0x55a9d222184a in wallet::MockableBatch::WriteKey(DataStream&&, DataStream&&, bool) util.cpp
        [#6](/github-metadata-backup-bitcoin-bitcoin/6/) 0x55a9d2191d3d in bool wallet::DatabaseBatch::Write<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, transaction_identifier<false>>, wallet::CWalletTx>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, transaction_identifier<false>> const&, wallet::CWalletTx const&, bool) walletdb.cpp
        [#7](/github-metadata-backup-bitcoin-bitcoin/7/) 0x55a9d2157224 in wallet::WalletBatch::WriteTx(wallet::CWalletTx const&) walletdb.cpp
        [#8](/github-metadata-backup-bitcoin-bitcoin/8/) 0x55a9d20aa090 in wallet::CWallet::AddToWallet(std::shared_ptr<CTransaction const>, std::variant<wallet::TxStateConfirmed, wallet::TxStateInMempool, wallet::TxStateBlockConflicted, wallet::TxStateInactive, wallet::TxStateUnrecognized> const&, std::function<bool (wallet::CWalletTx&, bool)> const&, bool) wallet.cpp
        [#9](/github-metadata-backup-bitcoin-bitcoin/9/) 0x55a9d156e376 in wallet::(anonymous namespace)::wallet_tx_can_be_bumped_fuzz_target(std::span<unsigned char const, 18446744073709551615ul>) feebumper.cpp
        [#10](/github-metadata-backup-bitcoin-bitcoin/10/) 0x55a9d15ceeb7 in LLVMFuzzerTestOneInput fuzz.cpp
        [#11](/github-metadata-backup-bitcoin-bitcoin/11/) 0x55a9d0d80b7b in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:619:13
        [#12](/github-metadata-backup-bitcoin-bitcoin/12/) 0x55a9d0d6a822 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) /llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:329:6
        [#13](/github-metadata-backup-bitcoin-bitcoin/13/) 0x55a9d0d706c0 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:864:9
        [#14](/github-metadata-backup-bitcoin-bitcoin/14/) 0x55a9d0d9d392 in main /llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10
        [#15](/github-metadata-backup-bitcoin-bitcoin/15/) 0x7f2959447ca7  (/lib/x86_64-linux-gnu/libc.so.6+0x29ca7) (BuildId: 58749c528985eab03e6700ebc1469fa50aa41219)
    
    SUMMARY: AddressSanitizer: heap-buffer-overflow script.cpp in CScript::IsPayToScriptHash() const
    Shadow bytes around the buggy address:
      0x7b695871ea00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871ea80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871eb00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871eb80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871ec00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    =>0x7b695871ec80: fa fa fa fa fa fa fa[fa]fa fa fa fa fa fa fa fa
      0x7b695871ed00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871ed80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871ee00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871ee80: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x7b695871ef00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    Shadow byte legend (one shadow byte represents 8 application bytes):
      Addressable:           00
      Partially addressable: 01 02 03 04 05 06 07 
      Heap left redzone:       fa
      Freed heap region:       fd
      Stack left redzone:      f1
      Stack mid redzone:       f2
      Stack right redzone:     f3
      Stack after return:      f5
      Stack use after scope:   f8
      Global redzone:          f9
      Global init order:       f6
      Poisoned by user:        f7
      Container overflow:      fc
      Array cookie:            ac
      Intra object redzone:    bb
      ASan internal:           fe
      Left alloca redzone:     ca
      Right alloca redzone:    cb
    ==27852==ABORTING
    

    </details>

    Left a comment below, I think that should fix it.

  20. fuzz: wallet: add target for `TransactionCanBeBumped` 6db6f7535f
  21. brunoerg force-pushed on May 18, 2026
  22. brunoerg commented at 6:21 PM on May 18, 2026: contributor

    Force-pushed: Rebased, addressed #33916 (review), and updated AddToMempool -> TryAddToMempool.


github-metadata-mirror

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