40 std::set<COutPoint> outpoints;
43 for (uint8_t i = 0; i < 4; i++) {
58 for (uint32_t i = 0; i < num_in; i++) {
59 auto& prevout =
PickValue(fuzzed_data_provider, outpoints);
64 for (uint32_t i = 0; i < num_out; i++) {
69 for (uint32_t i = 0; i < num_out; i++) {
70 outpoints.emplace(new_tx->GetHash(), i);
77 if (ptx_potential_parent) {
84 assert(std::any_of(child->vin.cbegin(), child->vin.cend(), [&](
const auto& input) {
85 return input.prevout.hash == ptx_potential_parent->GetHash();
89 assert(std::any_of(child->vin.cbegin(), child->vin.cend(), [&](
const auto& input) {
90 return input.prevout.hash == ptx_potential_parent->GetHash();
102 fuzzed_data_provider,
112 bool have_tx = orphanage.
HaveTx(tx->GetWitnessHash());
116 bool add_tx = orphanage.
AddTx(tx, peer_id);
118 Assert(!have_tx || !add_tx);
120 have_tx = orphanage.
HaveTx(tx->GetWitnessHash());
122 bool add_tx = orphanage.
AddTx(tx, peer_id);
125 Assert(!have_tx || !add_tx);
129 bool have_tx = orphanage.
HaveTx(tx->GetWitnessHash());
134 have_tx = orphanage.
HaveTx(tx->GetWitnessHash());
137 Assert(!have_tx && !orphanage.
EraseTx(tx->GetWitnessHash()));
153 if (!ptx_potential_parent || fuzzed_data_provider.
ConsumeBool()) {
154 ptx_potential_parent = tx;
int64_t CAmount
Amount in satoshis (Can be negative)
#define Assert(val)
Identity function.
Serialized script, used inside transaction inputs and outputs.
static const uint32_t SEQUENCE_FINAL
Setting nSequence to this value for every input in a transaction disables nLockTime/IsFinalTx().
T ConsumeIntegralInRange(T min, T max)
A class to track orphan transactions (failed on TX_MISSING_INPUTS) Since we cannot distinguish orphan...
void AddChildrenToWorkSet(const CTransaction &tx) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Add any orphans that list a particular tx as a parent into the from peer's work set.
void LimitOrphans(unsigned int max_orphans, FastRandomContext &rng) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Limit the orphanage to the given maximum.
bool AddTx(const CTransactionRef &tx, NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Add a new orphan transaction.
std::vector< std::pair< CTransactionRef, NodeId > > GetChildrenFromDifferentPeer(const CTransactionRef &parent, NodeId nodeid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Get all children that spend from this tx but were not received from nodeid.
size_t Size() EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Return how many entries exist in the orphange.
bool HaveTx(const Wtxid &wtxid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Check if we already have an orphan transaction (by wtxid only)
CTransactionRef GetTxToReconsider(NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Extract a transaction from a peer's work set Returns nullptr if there are no transactions to work on.
void EraseForPeer(NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Erase all orphans announced by a peer (eg, after that peer disconnects)
std::vector< CTransactionRef > GetChildrenFromSamePeer(const CTransactionRef &parent, NodeId nodeid) const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Get all children that spend from this tx and were received from nodeid.
int EraseTx(const Wtxid &wtxid) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
Erase an orphan by wtxid.
static transaction_identifier FromUint256(const uint256 &id)
static int32_t GetTransactionWeight(const CTransaction &tx)
#define LIMITED_WHILE(condition, limit)
Can be used to limit a theoretically unbounded loop.
static const uint32_t DEFAULT_MAX_ORPHAN_TRANSACTIONS
Default for -maxorphantx, maximum number of orphan transactions kept in memory.
static constexpr int32_t MAX_STANDARD_TX_WEIGHT
The maximum weight for transactions we're willing to relay/mine.
static CTransactionRef MakeTransactionRef(Tx &&txIn)
std::shared_ptr< const CTransaction > CTransactionRef
std::unique_ptr< T > MakeNoLogFileContext(const ChainType chain_type=ChainType::REGTEST, const std::vector< const char * > &extra_args={})
Make a test setup that has disk access to the debug.log file disabled.
A mutable version of CTransaction.
std::vector< CTxOut > vout
int64_t ConsumeTime(FuzzedDataProvider &fuzzed_data_provider, const std::optional< int64_t > &min, const std::optional< int64_t > &max) noexcept
auto & PickValue(FuzzedDataProvider &fuzzed_data_provider, Collection &col)
size_t CallOneOf(FuzzedDataProvider &fuzzed_data_provider, Callables... callables)
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
void initialize_orphanage()
FUZZ_TARGET(txorphan,.init=initialize_orphanage)