MCPcopy Create free account
hub / github.com/ElementsProject/elements / ConsumeTransaction

Function ConsumeTransaction

src/test/fuzz/util.cpp:289–331  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

287}
288
289CMutableTransaction ConsumeTransaction(FuzzedDataProvider& fuzzed_data_provider, const std::optional<std::vector<uint256>>& prevout_txids, const int max_num_in, const int max_num_out) noexcept
290{
291 CMutableTransaction tx_mut;
292 const auto p2wsh_op_true = fuzzed_data_provider.ConsumeBool();
293 tx_mut.nVersion = fuzzed_data_provider.ConsumeBool() ?
294 CTransaction::CURRENT_VERSION :
295 fuzzed_data_provider.ConsumeIntegral<int32_t>();
296 tx_mut.nLockTime = fuzzed_data_provider.ConsumeIntegral<uint32_t>();
297 const auto num_in = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, max_num_in);
298 const auto num_out = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, max_num_out);
299 for (int i = 0; i < num_in; ++i) {
300 const auto& txid_prev = prevout_txids ?
301 PickValue(fuzzed_data_provider, *prevout_txids) :
302 ConsumeUInt256(fuzzed_data_provider);
303 const auto index_out = fuzzed_data_provider.ConsumeIntegralInRange<uint32_t>(0, max_num_out);
304 const auto sequence = ConsumeSequence(fuzzed_data_provider);
305 const auto script_sig = p2wsh_op_true ? CScript{} : ConsumeScript(fuzzed_data_provider);
306 CScriptWitness script_wit;
307 if (p2wsh_op_true) {
308 script_wit.stack = std::vector<std::vector<uint8_t>>{WITNESS_STACK_ELEM_OP_TRUE};
309 } else {
310 script_wit = ConsumeScriptWitness(fuzzed_data_provider);
311 }
312 CTxIn in;
313 in.prevout = COutPoint{txid_prev, index_out};
314 in.nSequence = sequence;
315 in.scriptSig = script_sig;
316
317 CTxInWitness in_wit;
318 in_wit.scriptWitness = script_wit;
319
320 tx_mut.vin.push_back(in);
321 tx_mut.witness.vtxinwit.push_back(in_wit);
322 }
323 for (int i = 0; i < num_out; ++i) {
324 const auto amount = fuzzed_data_provider.ConsumeIntegralInRange<CAmount>(-10, 50 * COIN + 10);
325 const auto script_pk = p2wsh_op_true ?
326 P2WSH_OP_TRUE :
327 ConsumeScript(fuzzed_data_provider, /*maybe_p2wsh=*/true);
328 tx_mut.vout.emplace_back(CAsset(), amount, script_pk);
329 }
330 return tx_mut;
331}
332
333CScriptWitness ConsumeScriptWitness(FuzzedDataProvider& fuzzed_data_provider, const size_t max_stack_elem_size) noexcept
334{

Callers 2

FUZZ_TARGET_INITFunction · 0.85
FUZZ_TARGETFunction · 0.85

Calls 8

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

Tested by

no test coverage detected