diff --git a/src/test/fuzz/txorphan.cpp b/src/test/fuzz/txorphan.cpp index 31af1afff52..09056225db1 100644 --- a/src/test/fuzz/txorphan.cpp +++ b/src/test/fuzz/txorphan.cpp @@ -157,5 +157,8 @@ FUZZ_TARGET(txorphan, .init = initialize_orphanage) ptx_potential_parent = tx; } + const bool have_tx{orphanage.HaveTx(tx->GetWitnessHash())}; + const bool get_tx_nonnull{orphanage.GetTx(tx->GetWitnessHash()) != nullptr}; + Assert(have_tx == get_tx_nonnull); } } diff --git a/src/test/orphanage_tests.cpp b/src/test/orphanage_tests.cpp index 07e7002cadc..5d09fac4af7 100644 --- a/src/test/orphanage_tests.cpp +++ b/src/test/orphanage_tests.cpp @@ -250,7 +250,9 @@ BOOST_AUTO_TEST_CASE(same_txid_diff_witness) // EraseTx fails as transaction by this wtxid doesn't exist. BOOST_CHECK_EQUAL(orphanage.EraseTx(mutated_wtxid), 0); BOOST_CHECK(orphanage.HaveTx(normal_wtxid)); + BOOST_CHECK(orphanage.GetTx(normal_wtxid) == child_normal); BOOST_CHECK(!orphanage.HaveTx(mutated_wtxid)); + BOOST_CHECK(orphanage.GetTx(mutated_wtxid) == nullptr); // Must succeed. Both transactions should be present in orphanage. BOOST_CHECK(orphanage.AddTx(child_mutated, peer)); diff --git a/src/txorphanage.cpp b/src/txorphanage.cpp index a108ce94370..17b6622a567 100644 --- a/src/txorphanage.cpp +++ b/src/txorphanage.cpp @@ -179,6 +179,12 @@ bool TxOrphanage::HaveTx(const Wtxid& wtxid) const return m_orphans.count(wtxid); } +CTransactionRef TxOrphanage::GetTx(const Wtxid& wtxid) const +{ + auto it = m_orphans.find(wtxid); + return it != m_orphans.end() ? it->second.tx : nullptr; +} + bool TxOrphanage::HaveTxFromPeer(const Wtxid& wtxid, NodeId peer) const { auto it = m_orphans.find(wtxid); diff --git a/src/txorphanage.h b/src/txorphanage.h index 76ff8313a5a..6998a9aab18 100644 --- a/src/txorphanage.h +++ b/src/txorphanage.h @@ -33,6 +33,8 @@ public: /** Add an additional announcer to an orphan if it exists. Otherwise, do nothing. */ bool AddAnnouncer(const Wtxid& wtxid, NodeId peer); + CTransactionRef GetTx(const Wtxid& wtxid) const; + /** Check if we already have an orphan transaction (by wtxid only) */ bool HaveTx(const Wtxid& wtxid) const;