fuzz: Modify tx_pool_standard target to test package processing #25778

pull chinggg wants to merge 2 commits into bitcoin:master from chinggg:fuzz-pkg changing 1 files +130 −88
  1. chinggg commented at 9:05 am on August 4, 2022: contributor

    This draft PR can test package processing by creating package (vector of tx with ordered parents-childs relationship) instead of single tx in tx_pool_standard fuzz target.

    https://github.com/MarcoFalke/bitcoin-core/pull/78 has provided a draft for structural change, I only need to modify the anonymous function to create package. The basic idea is similar to https://github.com/bitcoin/bitcoin/blob/194f6dc43ccc330a8a4607be3a2b8935490d6db0/src/test/fuzz/txorphan.cpp#L51-L80, where we create tx from initial outpoints, then keep adding outs of newly constructed tx to outpoints in the loop. Since we want a package here, all new txs will be stored in a vector. The package should be valid since we don’t have any orphan tx with dangling input, though we can consume a bool from fuzz_data_provider to invalidate the package order by swapping some txs.

  2. fuzz: Prepare tx_pool target for package fuzzing 3328881d5c
  3. glozow commented at 9:07 am on August 4, 2022: member
    Concept ACK based on description, thanks for working on this!
  4. in src/test/fuzz/tx_pool.cpp:217 in c157a6ca57 outdated
    230+                    // Pop random outpoint
    231+                    auto pop = outpoints_rbf.begin();
    232+                    std::advance(pop, fuzzed_data_provider.ConsumeIntegralInRange<size_t>(0, outpoints_rbf.size() - 1));
    233+                    const auto outpoint = *pop;
    234+                    outpoints_rbf.erase(pop);
    235+                    amount_in += GetAmount(outpoint);
    


    chinggg commented at 9:10 am on August 4, 2022:

    Now the fuzz target has some shallow bugs. For example, GetAmount fail to get coin value. I guess that’s because I simply add newly constructed tx out to outpoints, so CCoinsViewMemPool::GetCoin cannot find the outpoint in mempool.

     0test/fuzz/tx_pool.cpp:164 operator(): Assertion `amount_view.GetCoin(outpoint, c)' failed.
     1==3026798== ERROR: libFuzzer: deadly signal
     2    [#0](/bitcoin-bitcoin/0/) 0x5609ccdba680 in __sanitizer_print_stack_trace (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xfd7680)
     3    [#1](/bitcoin-bitcoin/1/) 0x5609ccd66988 in fuzzer::PrintStackTrace() (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xf83988)
     4    [#2](/bitcoin-bitcoin/2/) 0x5609ccd4bad3 in fuzzer::Fuzzer::CrashCallback() (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xf68ad3)
     5    [#3](/bitcoin-bitcoin/3/) 0x7f173207341f  (/lib/x86_64-linux-gnu/libpthread.so.0+0x1441f)
     6    [#4](/bitcoin-bitcoin/4/) 0x7f1731cd900a in __libc_signal_restore_set /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/internal-signals.h:86:3
     7    [#5](/bitcoin-bitcoin/5/) 0x7f1731cd900a in raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:48:3
     8    [#6](/bitcoin-bitcoin/6/) 0x7f1731cb8858 in abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:79:7
     9    [#7](/bitcoin-bitcoin/7/) 0x5609cf0fa49d in assertion_fail(char const*, int, char const*, char const*) src/util/check.cpp:13:5
    10    [#8](/bitcoin-bitcoin/8/) 0x5609cd319c02 in bool&& inline_assertion_check<true, bool>(bool&&, char const*, int, char const*, char const*) src/./util/check.h:67:13
    11    [#9](/bitcoin-bitcoin/9/) 0x5609cd5cbdda in (anonymous namespace)::tx_pool_standard_fuzz_target(Span<unsigned char const>)::$_4::operator()(COutPoint const&) const src/test/fuzz/tx_pool.cpp:164:9
    12    [#10](/bitcoin-bitcoin/10/) 0x5609cd5cc62a in (anonymous namespace)::tx_pool_standard_fuzz_target(Span<unsigned char const>)::$_5::operator()() const src/test/fuzz/tx_pool.cpp:198:34
    

    There are at least two different ways to fix the assert:

    • extend the outpoints_* datastructures with the amount and use that directly
    • add a new datastructure to keep track of amounts and modify GetAmount to use that

    chinggg commented at 2:47 am on August 5, 2022:
    This assertion failure is solved in https://github.com/bitcoin/bitcoin/commit/c157a6ca57cd4c1392ad82b85d4b1df0b7d23e11, by changing amount_view to be non-const and calling amount_view.PackageAddTransaction(tx); after each tx is constructed.
  5. fanquake added the label Tests on Aug 4, 2022
  6. in src/test/fuzz/tx_pool.cpp:311 in c157a6ca57 outdated
    317+            for (const auto& tx : package) {
    318+                removed.erase(tx);
    319+            }
    320         }
    321 
    322         // Helper to insert spent and created outpoints of a tx into collections
    


    chinggg commented at 3:03 am on August 5, 2022:

    Another bug assert violation happens in insert_tx.

     0test/fuzz/tx_pool.cpp:308 operator(): Assertion `set.get().emplace(tx.GetHash(), i).second' failed.
     1==3192931== ERROR: libFuzzer: deadly signal
     2    [#0](/bitcoin-bitcoin/0/) 0x55c5a9cbf680 in __sanitizer_print_stack_trace (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xfd7680)
     3    [#1](/bitcoin-bitcoin/1/) 0x55c5a9c6b988 in fuzzer::PrintStackTrace() (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xf83988)
     4    [#2](/bitcoin-bitcoin/2/) 0x55c5a9c50ad3 in fuzzer::Fuzzer::CrashCallback() (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xf68ad3)
     5    [#3](/bitcoin-bitcoin/3/) 0x7f666ad8a41f  (/lib/x86_64-linux-gnu/libpthread.so.0+0x1441f)
     6    [#4](/bitcoin-bitcoin/4/) 0x7f666a9f000a in __libc_signal_restore_set /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/internal-signals.h:86:3
     7    [#5](/bitcoin-bitcoin/5/) 0x7f666a9f000a in raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:48:3
     8    [#6](/bitcoin-bitcoin/6/) 0x7f666a9cf858 in abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:79:7
     9    [#7](/bitcoin-bitcoin/7/) 0x55c5abfff51d in assertion_fail(char const*, int, char const*, char const*) src/util/check.cpp:13:5
    10    [#8](/bitcoin-bitcoin/8/) 0x55c5aa21ec02 in bool&& inline_assertion_check<true, bool>(bool&&, char const*, int, char const*, char const*) src/./util/check.h:67:13
    11    [#9](/bitcoin-bitcoin/9/) 0x55c5aa4d3759 in auto (anonymous namespace)::tx_pool_standard_fuzz_target(Span<unsigned char const>)::$_1::operator()<CTransaction>(std::vector<std::reference_wrapper<std::set<COutPoint, std::less<COutPoint>, std::allocator<COutPoint> > >, std::allocator<std::reference_wrapper<std::set<COutPoint, std::less<COutPoint>, std::allocator<COutPoint> > > > >, std::vector<std::reference_wrapper<std::set<COutPoint, std::less<COutPoint>, std::allocator<COutPoint> > >, std::allocator<std::reference_wrapper<std::set<COutPoint, std::less<COutPoint>, std::allocator<COutPoint> > > > >, CTransaction const&) const src/test/fuzz/tx_pool.cpp:308:21
    12    [#10](/bitcoin-bitcoin/10/) 0x55c5aa4cdf0a in (anonymous namespace)::tx_pool_standard_fuzz_target(Span<unsigned char const>) src/test/fuzz/tx_pool.cpp:327:17
    

    https://github.com/bitcoin/bitcoin/blob/master/src/test/fuzz/tx_pool.cpp#L271-L296

    I am not sure about what the loops are doing. Maybe outpoint_rbf should not be modified when constructing transactions.


    chinggg commented at 2:12 am on August 6, 2022:
    This is solved in https://github.com/bitcoin/bitcoin/commit/6ca7fcf2247ed7067ebaf3ee8dc325d49142d666 by use a new copy of outpoint_rbf in the loop.
  7. chinggg force-pushed on Aug 5, 2022
  8. chinggg force-pushed on Aug 6, 2022
  9. fuzz: Construct valid package for tx_pool_standard target 08e5172fbc
  10. in src/test/fuzz/tx_pool.cpp:286 in 6ca7fcf224 outdated
    294+                    Assert(tx_res.second.m_result_type == MempoolAcceptResult::ResultType::VALID ||
    295+                           tx_res.second.m_result_type == MempoolAcceptResult::ResultType::INVALID);
    296+                }
    297+            }
    298+            if (accepted) {
    299+                Assert(result_package.m_tx_results.size() == package.size());
    


    chinggg commented at 2:11 am on August 6, 2022:

    The assertion result_package.m_tx_results.size() == package.size() failed quickly. I debug the testcase and it seems results.size() < package.size().

     0test/fuzz/tx_pool.cpp:286 tx_pool_standard_fuzz_target: Assertion `result_package.m_tx_results.size() == package.size()' failed.
     1==3398073== ERROR: libFuzzer: deadly signal
     2    [#0](/bitcoin-bitcoin/0/) 0x55e1fcaec680 in __sanitizer_print_stack_trace (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xfd8680)
     3    [#1](/bitcoin-bitcoin/1/) 0x55e1fca98988 in fuzzer::PrintStackTrace() (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xf84988)
     4    [#2](/bitcoin-bitcoin/2/) 0x55e1fca7dad3 in fuzzer::Fuzzer::CrashCallback() (/home/ubuntu/bitcoin/src/test/fuzz/fuzz+0xf69ad3)
     5    [#3](/bitcoin-bitcoin/3/) 0x7ff789c3741f  (/lib/x86_64-linux-gnu/libpthread.so.0+0x1441f)
     6    [#4](/bitcoin-bitcoin/4/) 0x7ff78989d00a in __libc_signal_restore_set /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/internal-signals.h:86:3
     7    [#5](/bitcoin-bitcoin/5/) 0x7ff78989d00a in raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:48:3
     8    [#6](/bitcoin-bitcoin/6/) 0x7ff78987c858 in abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:79:7
     9    [#7](/bitcoin-bitcoin/7/) 0x55e1fee2dc3d in assertion_fail(char const*, int, char const*, char const*) src/util/check.cpp:13:5
    10    [#8](/bitcoin-bitcoin/8/) 0x55e1fd04bc02 in bool&& inline_assertion_check<true, bool>(bool&&, char const*, int, char const*, char const*) src/./util/check.h:67:13
    11    [#9](/bitcoin-bitcoin/9/) 0x55e1fd2f9f0b in (anonymous namespace)::tx_pool_standard_fuzz_target(Span<unsigned char const>) src/test/fuzz/tx_pool.cpp:286:17
    

    maflcko commented at 8:29 pm on August 6, 2022:

    Ok, that is probably my fault. I wrote the fuzz code without reading the validation code. I should read more about the interface and the meaning of valid/invalid in the context of packages. Apparently we can’t deduce any meaningful information useful for fuzzing from the result. So for now I’d suggest to remove the failing Asserts.

    Moreover, the “tracking” code seems not prepared for packages. I think it can be fixed by tracking the history of added/removed transactions chronologically. (That is, switching the two std::set into one std::vector)

    See this diff:

     0diff --git a/src/test/fuzz/tx_pool.cpp b/src/test/fuzz/tx_pool.cpp
     1index c38e3420f6..b01b4f978a 100644
     2--- a/src/test/fuzz/tx_pool.cpp
     3+++ b/src/test/fuzz/tx_pool.cpp
     4@@ -70,6 +70,24 @@ struct TransactionsDelta final : public CValidationInterface {
     5     }
     6 };
     7 
     8+struct TransactionsHistory final : public CValidationInterface {
     9+    std::vector<std::tuple<bool, CTransactionRef>>& m_history;
    10+
    11+    explicit TransactionsHistory(std::vector<std::tuple<bool, CTransactionRef>>& h)
    12+        : m_history{h} {}
    13+
    14+    void TransactionAddedToMempool(const CTransactionRef& tx, uint64_t /* mempool_sequence */) override
    15+    {
    16+        m_history.emplace_back(true, tx);
    17+    }
    18+
    19+    void TransactionRemovedFromMempool(const CTransactionRef& tx, MemPoolRemovalReason reason, uint64_t /* mempool_sequence */) override
    20+    {
    21+        if (reason != MemPoolRemovalReason::SIZELIMIT)
    22+            m_history.emplace_back(false, tx);
    23+    }
    24+};
    25+
    26 void SetMempoolConstraints(ArgsManager& args, FuzzedDataProvider& fuzzed_data_provider)
    27 {
    28     args.ForceSetArg("-limitancestorcount",
    29@@ -247,9 +265,8 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
    30         }
    31 
    32         // Remember all removed and added transactions
    33-        std::set<CTransactionRef> removed;
    34-        std::set<CTransactionRef> added;
    35-        auto txr = std::make_shared<TransactionsDelta>(removed, added);
    36+        std::vector<std::tuple<bool, CTransactionRef>> history;
    37+        auto txr = std::make_shared<TransactionsHistory>(history);
    38         RegisterSharedValidationInterface(txr);
    39         const bool bypass_limits = fuzzed_data_provider.ConsumeBool();
    40 
    41@@ -283,7 +300,6 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
    42                 }
    43             }
    44             if (accepted) {
    45-                Assert(result_package.m_tx_results.size() == package.size());
    46                 for (const auto& tx_res : result_package.m_tx_results) {
    47                     Assert(tx_res.second.m_result_type == MempoolAcceptResult::ResultType::VALID);
    48                 }
    49@@ -291,15 +307,6 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
    50         }
    51         SyncWithValidationInterfaceQueue();
    52         UnregisterSharedValidationInterface(txr);
    53-        Assert(accepted != added.empty());
    54-        if (accepted) {
    55-            Assert(Package(added.begin(), added.end()) == package);
    56-        } else {
    57-            // Do not consider rejected transactions removed
    58-            for (const auto& tx : package) {
    59-                removed.erase(tx);
    60-            }
    61-        }
    62 
    63         // Helper to insert spent and created outpoints of a tx into collections
    64         using Sets = std::vector<std::reference_wrapper<std::set<COutPoint>>>;
    65@@ -317,16 +324,17 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
    66         };
    67         // Add created outpoints, remove spent outpoints
    68         {
    69+            for (const auto& [added,tx]:history){
    70             // Outpoints that no longer exist at all
    71             std::set<COutPoint> consumed_erased;
    72             // Outpoints that no longer count toward the total supply
    73             std::set<COutPoint> consumed_supply;
    74-            for (const auto& removed_tx : removed) {
    75-                insert_tx(/*created_by_tx=*/{consumed_erased}, /*consumed_by_tx=*/{outpoints_supply}, /*tx=*/*removed_tx);
    76-            }
    77-            for (const auto& added_tx : added) {
    78-                insert_tx(/*created_by_tx=*/{outpoints_supply, outpoints_rbf}, /*consumed_by_tx=*/{consumed_supply}, /*tx=*/*added_tx);
    79+            if (added) {
    80+                insert_tx(/*created_by_tx=*/{outpoints_supply, outpoints_rbf}, /*consumed_by_tx=*/{consumed_supply}, /*tx=*/*tx);
    81+            } else {
    82+                insert_tx(/*created_by_tx=*/{consumed_erased}, /*consumed_by_tx=*/{outpoints_supply}, /*tx=*/*tx);
    83             }
    84+
    85             for (const auto& p : consumed_erased) {
    86                 Assert(outpoints_supply.erase(p) == 1);
    87                 Assert(outpoints_rbf.erase(p) == 1);
    88@@ -334,6 +342,7 @@ FUZZ_TARGET_INIT(tx_pool_standard, initialize_tx_pool)
    89             for (const auto& p : consumed_supply) {
    90                 Assert(outpoints_supply.erase(p) == 1);
    91             }
    92+            }
    93         }
    94     }
    95     Finish(fuzzed_data_provider, tx_pool, chainstate);
    

    However, now I am running into an assert in validation, which might be an actual bug :smiling_face_with_tear:


    chinggg commented at 8:04 am on August 12, 2022:

    Sorry for the late response, your diff is applied in https://github.com/bitcoin/bitcoin/commit/08e5172fbc5c4f5032c10dde95d463e33b644e2a, with some formatting changes by clangd. I will try to find the reason of crash in validation.cpp:414: bool CheckInputsFromMempoolAndCache(const CTransaction &, TxValidationState &, const CCoinsViewCache &, const CTxMemPool &, unsigned int, PrecomputedTransactionData &, CCoinsViewCache &): Assertion !coinFromUTXOSet.IsSpent()' failed. It happens after 3 continues on breakpoint tx_pool.cpp:291

    0[#10](/bitcoin-bitcoin/10/) 0x5634390f86ad in CheckInputsFromMempoolAndCache(CTransaction const&, TxValidationState&, CCoinsViewCache const&, CTxMemPool const&, unsigned int, PrecomputedTransactionData&, CCoinsViewCache&) src/./src/validation.cpp:414:13
    1[#11](/bitcoin-bitcoin/11/) 0x5634390f4729 in (anonymous namespace)::MemPoolAccept::ConsensusScriptChecks((anonymous namespace)::MemPoolAccept::ATMPArgs const&, (anonymous namespace)::MemPoolAccept::Workspace&) src/./src/validation.cpp:1040:10
    2[#12](/bitcoin-bitcoin/12/) 0x563439100255 in (anonymous namespace)::MemPoolAccept::SubmitPackage((anonymous namespace)::MemPoolAccept::ATMPArgs const&, std::vector<(anonymous namespace)::MemPoolAccept::Workspace, std::allocator<(anonymous namespace)::MemPoolAccept::Workspace> >&, PackageValidationState&, std::map<uint256 const, MempoolAcceptResult const, std::less<uint256 const>, std::allocator<std::pair<uint256 const, MempoolAcceptResult const> > >&) src/./src/validation.cpp:1112:14
    3[#13](/bitcoin-bitcoin/13/) 0x5634390fc3ee in (anonymous namespace)::MemPoolAccept::AcceptMultipleTransactions(std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const> > > const&, (anonymous namespace)::MemPoolAccept::ATMPArgs&) src/./src/validation.cpp:1273:10
    4[#14](/bitcoin-bitcoin/14/) 0x5634390fe435 in (anonymous namespace)::MemPoolAccept::AcceptPackage(std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const> > > const&, (anonymous namespace)::MemPoolAccept::ATMPArgs&) src/./src/validation.cpp:1404:30
    5[#15](/bitcoin-bitcoin/15/) 0x5634390a201c in ProcessNewPackage(CChainState&, CTxMemPool&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const> > > const&, bool)::$_2::operator()() const src/./src/validation.cpp:1458:59
    6[#16](/bitcoin-bitcoin/16/) 0x5634390a187f in ProcessNewPackage(CChainState&, CTxMemPool&, std::vector<std::shared_ptr<CTransaction const>, std::allocator<std::shared_ptr<CTransaction const> > > const&, bool) src/./src/validation.cpp:1451:25
    7[#17](/bitcoin-bitcoin/17/) 0x5634385288a5 in (anonymous namespace)::tx_pool_standard_fuzz_target(Span<unsigned char const>)::$_7::operator()() const src/./src/test/fuzz/tx_pool.cpp:291:39
    

    chinggg commented at 9:31 am on August 12, 2022:
    The crash happens when one of the tx finally get passed into CheckInputsFromMempoolAndCache, it assume that the tx is either a UTXO from mempool or UTXO set. The assert fails because coinFromUTXOSet is actually coinEmpty.
  11. chinggg force-pushed on Aug 12, 2022
  12. DrahtBot commented at 10:02 am on September 23, 2022: contributor

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

    Reviews

    See the guideline for information on the review process.

    Type Reviewers
    Concept ACK glozow

    If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

    Conflicts

    Reviewers, this pull request conflicts with the following ones:

    • #26758 (clang-tidy: Add performance-no-automatic-move check by hebasto)
    • #26642 (clang-tidy: Add more performance-* checks and related fixes by hebasto)

    If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

  13. fanquake commented at 11:53 am on December 5, 2022: member

    @chinggg are you planning on following up with the build failures here?

    0/usr/bin/ccache clang++ -ftrivial-auto-var-init=pattern -std=c++17 -DHAVE_CONFIG_H -I. -I../src/config  -DABORT_ON_FAILED_ASSUME -fmacro-prefix-map=/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu=. -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -DHAVE_BUILD_INFO -I. -I./minisketch/include -I./secp256k1/include -I./univalue/include  -I./leveldb/include  -fdebug-prefix-map=/tmp/cirrus-ci-build/ci/scratch/build/bitcoin-x86_64-pc-linux-gnu=. -Wstack-protector -fstack-protector-all -fcf-protection=full -fstack-clash-protection -Wall -Wextra -Wgnu -Wformat -Wformat-security -Wvla -Wshadow-field -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunused-member-function -Wdate-time -Wconditional-uninitialized -Woverloaded-virtual -Wsuggest-override -Wunreachable-code-loop-increment -Wimplicit-fallthrough -Wdocumentation -Wno-unused-parameter -Wno-self-assign -Werror  -fsanitize=fuzzer,address,undefined,integer   -fPIE -g -O2 -c -o test/fuzz/fuzz-tx_pool.o `test -f 'test/fuzz/tx_pool.cpp' || echo './'`test/fuzz/tx_pool.cpp
    1test/fuzz/tx_pool.cpp:59:14: error: unused member function 'TransactionsDelta' [-Werror,-Wunused-member-function]
    2    explicit TransactionsDelta(std::set<CTransactionRef>& r, std::set<CTransactionRef>& a)
    3             ^
    41 error generated.
    5make[2]: *** [Makefile:16988: test/fuzz/fuzz-tx_pool.o] Error 1
    
  14. maflcko commented at 12:01 pm on December 5, 2022: member
    I think the build failures can be fixed, but then there will be fuzz failures and I never got around to fully debug this, as the package stuff is still being worked on as we speak
  15. chinggg commented at 7:33 am on December 6, 2022: contributor
    @fanquake Sorry for the late reply. I just built this code with ./configure --enable-debug --enable-fuzz --with-gui=no and my compiler (clang++ 15) recognized this unused member function 'TransactionsDelta' as a warning instead of an error. For the completion of this PR, we might wait for the progress of the new package relay feature. The original BIP PR https://github.com/bitcoin/bips/pull/1324 has been closed and it seems “the updated proposal is going to be significantly different”
  16. fanquake commented at 9:14 am on December 6, 2022: member
    Ok. Should we close this for now then, and reopen when we actually know what we have to fuzz?
  17. DrahtBot added the label Needs rebase on Jan 11, 2023
  18. DrahtBot commented at 4:02 pm on January 11, 2023: contributor

    🐙 This pull request conflicts with the target branch and needs rebase.

  19. DrahtBot commented at 1:27 am on April 11, 2023: contributor

    There hasn’t been much activity lately and the patch still needs rebase. What is the status here?

    • Is it still relevant? ➡️ Please solve the conflicts to make it ready for review and to ensure the CI passes.
    • Is it no longer relevant? ➡️ Please close.
    • Did the author lose interest or time to work on this? ➡️ Please close it and mark it ‘Up for grabs’ with the label, so that it can be picked up in the future.
  20. DrahtBot commented at 0:49 am on July 10, 2023: contributor

    There hasn’t been much activity lately and the patch still needs rebase. What is the status here?

    • Is it still relevant? ➡️ Please solve the conflicts to make it ready for review and to ensure the CI passes.
    • Is it no longer relevant? ➡️ Please close.
    • Did the author lose interest or time to work on this? ➡️ Please close it and mark it ‘Up for grabs’ with the label, so that it can be picked up in the future.
  21. maflcko commented at 6:39 am on July 10, 2023: member
    Closing for now. Maybe this can be picked up as part of one of the package relay PRs.
  22. maflcko closed this on Jul 10, 2023

  23. chinggg commented at 10:12 am on July 13, 2023: contributor
    I am not sure if the package relay features have been implemented. Feel free to reach out to me if there is need to continue the development of this fuzz target.
  24. bitcoin locked this on Sep 13, 2024

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: 2024-11-23 12:12 UTC

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