MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / ConsumeTransaction

Function ConsumeTransaction

src/test/fuzz/util.cpp:42–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40}
41
42CMutableTransaction ConsumeTransaction(FuzzedDataProvider& fuzzed_data_provider, const std::optional<std::vector<Txid>>& prevout_txids, const int max_num_in, const int max_num_out) noexcept
43{
44 CMutableTransaction tx_mut;
45 const auto p2wsh_op_true = fuzzed_data_provider.ConsumeBool();
46 tx_mut.version = fuzzed_data_provider.ConsumeBool() ?
47 CTransaction::CURRENT_VERSION :
48 fuzzed_data_provider.ConsumeIntegral<uint32_t>();
49 tx_mut.nLockTime = fuzzed_data_provider.ConsumeIntegral<uint32_t>();
50 const auto num_in = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, max_num_in);
51 const auto num_out = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, max_num_out);
52 for (int i = 0; i < num_in; ++i) {
53 const auto& txid_prev = prevout_txids ?
54 PickValue(fuzzed_data_provider, *prevout_txids) :
55 Txid::FromUint256(ConsumeUInt256(fuzzed_data_provider));
56 const auto index_out = fuzzed_data_provider.ConsumeIntegralInRange<uint32_t>(0, max_num_out);
57 const auto sequence = ConsumeSequence(fuzzed_data_provider);
58 const auto script_sig = p2wsh_op_true ? CScript{} : ConsumeScript(fuzzed_data_provider);
59 CScriptWitness script_wit;
60 if (p2wsh_op_true) {
61 script_wit.stack = std::vector<std::vector<uint8_t>>{WITNESS_STACK_ELEM_OP_TRUE};
62 } else {
63 script_wit = ConsumeScriptWitness(fuzzed_data_provider);
64 }
65 CTxIn in;
66 in.prevout = COutPoint{txid_prev, index_out};
67 in.nSequence = sequence;
68 in.scriptSig = script_sig;
69 in.scriptWitness = script_wit;
70
71 tx_mut.vin.push_back(in);
72 }
73 for (int i = 0; i < num_out; ++i) {
74 const auto amount = fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(-10, 50 * COIN + 10);
75 const auto script_pk = p2wsh_op_true ?
76 P2WSH_OP_TRUE :
77 ConsumeScript(fuzzed_data_provider, /*maybe_p2wsh=*/true);
78 tx_mut.vout.emplace_back(amount, script_pk);
79 }
80 return tx_mut;
81}
82
83CScriptWitness ConsumeScriptWitness(FuzzedDataProvider& fuzzed_data_provider, const size_t max_stack_elem_size) noexcept
84{

Callers 4

tx_pool.cppFile · 0.85
FUZZ_TARGETFunction · 0.85
FUZZ_TARGETFunction · 0.85
ipc.cppFile · 0.85

Calls 7

ConsumeUInt256Function · 0.85
ConsumeSequenceFunction · 0.85
ConsumeScriptFunction · 0.85
ConsumeScriptWitnessFunction · 0.85
ConsumeBoolMethod · 0.80
push_backMethod · 0.45
emplace_backMethod · 0.45

Tested by

no test coverage detected