9#include <chainparams.h>
109 std::cerr << str_err << std::endl;
130 std::vector<const char*> arguments =
Cat(
134 "-logsourcelocations",
139 "-debugexclude=libevent",
140 "-debugexclude=leveldb",
147 gArgs.ClearPathCache();
152 if (!
m_node.args->ParseParameters(arguments.size(), arguments.data(), error)) {
154 throw std::runtime_error{error};
159 if (!
m_node.args->IsArgSet(
"-testdatadir")) {
168 if (
const char* shm_id = std::getenv(
"__AFL_SHM_ID"); shm_id && *shm_id) {
179 fs::path root_dir{
m_node.args->GetPathArg(
"-testdatadir")};
180 if (root_dir.empty())
ExitFailure(
"-testdatadir argument is empty, please specify a path");
182 root_dir = fs::absolute(root_dir);
189 ExitFailure(
"Cannot obtain a lock on test data lock directory " + fs::PathToString(
m_path_lock) +
'\n' +
"The test executable is probably already running.");
197 std::cout <<
"Test directory (will not be deleted): " <<
m_path_root << std::endl;
207 m_node.warnings = std::make_unique<node::Warnings>();
208 m_node.kernel = std::make_unique<kernel::Context>();
209 m_node.ecc_context = std::make_unique<ECC_Context>();
213 static bool noui_connected =
false;
214 if (!noui_connected) {
216 noui_connected =
true;
222 m_node.ecc_context.reset();
249 m_node.scheduler = std::make_unique<CScheduler>();
251 m_node.validation_signals =
254 std::make_unique<ValidationSignals>(std::make_unique<util::ImmediateTaskRunner>()) :
255 std::make_unique<ValidationSignals>(std::make_unique<SerialTaskRunner>(*
m_node.scheduler));
258 std::promise<void> promise;
259 m_node.scheduler->scheduleFromNow([&promise] { promise.set_value(); }, 0ms);
260 promise.get_future().wait();
267 m_node.warnings = std::make_unique<node::Warnings>();
274 .chainparams = chainparams,
275 .datadir =
m_args.GetDataDirNet(),
276 .check_block_index = 1,
277 .notifications = *
m_node.notifications,
278 .signals =
m_node.validation_signals.get(),
288 .blocks_dir =
m_args.GetBlocksDirPath(),
291 .path =
m_args.GetDataDirNet() /
"blocks" /
"index",
294 .wipe_data =
m_args.GetBoolArg(
"-reindex",
false),
297 m_node.chainman = std::make_unique<ChainstateManager>(*
Assert(
m_node.shutdown_signal), chainman_opts, blockman_opts);
305 if (
m_node.validation_signals)
m_node.validation_signals->FlushBackgroundCallbacks();
309 m_node.netgroupman.reset();
314 m_node.validation_signals.reset();
325 options.
prune = chainman.m_blockman.IsPruneMode();
336 if (!chainman.ActiveChainstate().ActivateBestChain(state)) {
337 throw std::runtime_error(
strprintf(
"ActivateBestChain failed. (%s)", state.
ToString()));
357 m_node.addrman = std::make_unique<AddrMan>(*
m_node.netgroupman,
359 m_node.args->GetIntArg(
"-checkaddrman", 0));
373 m_node.connman->Init(options);
383 constexpr std::array<unsigned char, 32> vchKey = {
384 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}};
385 coinbaseKey.Set(vchKey.begin(), vchKey.end(),
true);
393 m_node.chainman->ActiveChain().Tip()->GetBlockHash().ToString() ==
394 "0c8c5f79505775a0f6aed6aca2350718ceb9c6f2c878667864d5c7a6d8ffa2a6");
401 for (
int i = 0; i < num_blocks; i++) {
402 std::vector<CMutableTransaction> noTxns;
410 const std::vector<CMutableTransaction>& txns,
431 const std::vector<CMutableTransaction>& txns,
436 chainstate = &
Assert(
m_node.chainman)->ActiveChainstate();
440 std::shared_ptr<const CBlock> shared_pblock = std::make_shared<const CBlock>(block);
441 Assert(
m_node.chainman)->ProcessNewBlock(shared_pblock,
true,
true,
nullptr);
447 const std::vector<COutPoint>& inputs,
449 const std::vector<CKey>& input_signing_keys,
450 const std::vector<CTxOut>& outputs,
451 const std::optional<CFeeRate>& feerate,
452 const std::optional<uint32_t>& fee_output)
455 mempool_txn.
vin.reserve(inputs.size());
456 mempool_txn.
vout.reserve(outputs.size());
458 for (
const auto& outpoint : inputs) {
461 mempool_txn.
vout = outputs;
465 for (
const auto& input_signing_key : input_signing_keys) {
466 keystore.
AddKey(input_signing_key);
471 for (
const auto& input_transaction : input_transactions) {
472 AddCoins(coins_cache, *input_transaction.get(), input_height);
475 std::map<COutPoint, Coin> input_coins;
477 for (
const auto& outpoint_to_spend : inputs) {
479 auto utxo_to_spend{coins_cache.
GetCoin(outpoint_to_spend).value()};
480 input_coins.insert({outpoint_to_spend, utxo_to_spend});
481 inputs_amount += utxo_to_spend.out.nValue;
485 std::map<int, bilingual_str> input_errors;
487 CAmount current_fee = inputs_amount - std::accumulate(outputs.begin(), outputs.end(),
CAmount(0),
489 return acc + out.nValue;
492 if (feerate.has_value()) {
493 assert(fee_output.has_value());
494 assert(fee_output.value() < mempool_txn.
vout.size());
496 CAmount deduction = target_fee - current_fee;
500 mempool_txn.
vout[fee_output.value()].nValue -= deduction;
502 input_errors.clear();
504 current_fee = target_fee;
507 return {mempool_txn, current_fee};
511 const std::vector<COutPoint>& inputs,
513 const std::vector<CKey>& input_signing_keys,
514 const std::vector<CTxOut>& outputs,
530 CKey input_signing_key,
535 COutPoint input{input_transaction->GetHash(), input_vout};
536 CTxOut output{output_amount, output_destination};
547 std::vector<CTransactionRef> mempool_transactions;
548 std::deque<std::pair<COutPoint, CAmount>> unspent_prevouts, undo_info;
550 [](
const auto& tx){ return std::make_pair(COutPoint(tx->GetHash(), 0), tx->vout[0].nValue); });
551 while (num_transactions > 0 && !unspent_prevouts.empty()) {
555 const size_t num_inputs = det_rand.
randrange(5) + 1;
557 for (
size_t n{0}; n < num_inputs; ++n) {
558 if (unspent_prevouts.empty())
break;
559 const auto& [prevout, amount] = unspent_prevouts.front();
560 undo_info.emplace_back(prevout, amount);
563 unspent_prevouts.pop_front();
565 const size_t num_outputs = det_rand.
randrange(25) + 1;
567 const CAmount amount_per_output = (total_in -
fee) / num_outputs;
568 for (
size_t n{0}; n < num_outputs; ++n) {
570 mtx.
vout.emplace_back(amount_per_output, spk);
577 auto changeset =
m_node.mempool->GetChangeSet();
578 changeset->StageAddition(ptx, (total_in - num_outputs * amount_per_output),
581 if (changeset->CheckMemPoolPolicyLimits()) {
587 for (
const auto& [prevout, amount] : undo_info) {
588 unspent_prevouts.emplace_back(prevout, amount);
589 std::swap(unspent_prevouts.back(), unspent_prevouts[det_rand.
randrange(unspent_prevouts.size())]);
594 mempool_transactions.push_back(ptx);
595 if (amount_per_output > 3000) {
599 for (
size_t n{0}; n < num_outputs; ++n) {
600 unspent_prevouts.emplace_back(
COutPoint(ptx->GetHash(), n), amount_per_output);
601 std::swap(unspent_prevouts.back(), unspent_prevouts[det_rand.
randrange(unspent_prevouts.size())]);
607 return mempool_transactions;
618 "0100000090f0a9f110702f808219ebea1173056042a714bad51b916cb6800000000000005275289558f51c9966699404ae2294730c3c9f9bda53523ce50e9b95e558da2fdb261b4d4c86041b1ab1bf930901000000010000000000000000000000000000000000000000000000000000000000000000ffffffff07044c86041b0146ffffffff0100f2052a01000000434104e18f7afbe4721580e81e8414fc8c24d7cfacf254bb5c7b949450c3e997c2dc1242487a8169507b631eb3771f2b425483fb13102c4eb5d858eef260fe70fbfae0ac00000000010000000196608ccbafa16abada902780da4dc35dafd7af05fa0da08cf833575f8cf9e836000000004a493046022100dab24889213caf43ae6adc41cf1c9396c08240c199f5225acf45416330fd7dbd022100fe37900e0644bf574493a07fc5edba06dbc07c311b947520c2d514bc5725dcb401ffffffff0100f2052a010000001976a914f15d1921f52e4007b146dfa60f369ed2fc393ce288ac000000000100000001fb766c1288458c2bafcfec81e48b24d98ec706de6b8af7c4e3c29419bfacb56d000000008c493046022100f268ba165ce0ad2e6d93f089cfcd3785de5c963bb5ea6b8c1b23f1ce3e517b9f022100da7c0f21adc6c401887f2bfd1922f11d76159cbc597fbd756a23dcbb00f4d7290141042b4e8625a96127826915a5b109852636ad0da753c9e1d5606a50480cd0c40f1f8b8d898235e571fe9357d9ec842bc4bba1827daaf4de06d71844d0057707966affffffff0280969800000000001976a9146963907531db72d0ed1a0cfb471ccb63923446f388ac80d6e34c000000001976a914f0688ba1c0d1ce182c7af6741e02658c7d4dfcd388ac000000000100000002c40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff010000008b483045022100f7edfd4b0aac404e5bab4fd3889e0c6c41aa8d0e6fa122316f68eddd0a65013902205b09cc8b2d56e1cd1f7f2fafd60a129ed94504c4ac7bdc67b56fe67512658b3e014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffffca5065ff9617cbcba45eb23726df6498a9b9cafed4f54cbab9d227b0035ddefb000000008a473044022068010362a13c7f9919fa832b2dee4e788f61f6f5d344a7c2a0da6ae740605658022006d1af525b9a14a35c003b78b72bd59738cd676f845d1ff3fc25049e01003614014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffff01001ec4110200000043410469ab4181eceb28985b9b4e895c13fa5e68d85761b7eee311db5addef76fa8621865134a221bd01f28ec9999ee3e021e60766e9d1f3458c115fb28650605f11c9ac000000000100000001cdaf2f758e91c514655e2dc50633d1e4c84989f8aa90a0dbc883f0d23ed5c2fa010000008b48304502207ab51be6f12a1962ba0aaaf24a20e0b69b27a94fac5adf45aa7d2d18ffd9236102210086ae728b370e5329eead9accd880d0cb070aea0c96255fae6c4f1ddcce1fd56e014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff02404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac002d3101000000001976a9141befba0cdc1ad56529371864d9f6cb042faa06b588ac000000000100000001b4a47603e71b61bc3326efd90111bf02d2f549b067f4c4a8fa183b57a0f800cb010000008a4730440220177c37f9a505c3f1a1f0ce2da777c339bd8339ffa02c7cb41f0a5804f473c9230220585b25a2ee80eb59292e52b987dad92acb0c64eced92ed9ee105ad153cdb12d001410443bd44f683467e549dae7d20d1d79cbdb6df985c6e9c029c8d0c6cb46cc1a4d3cf7923c5021b27f7a0b562ada113bc85d5fda5a1b41e87fe6e8802817cf69996ffffffff0280651406000000001976a9145505614859643ab7b547cd7f1f5e7e2a12322d3788ac00aa0271000000001976a914ea4720a7a52fc166c55ff2298e07baf70ae67e1b88ac00000000010000000586c62cd602d219bb60edb14a3e204de0705176f9022fe49a538054fb14abb49e010000008c493046022100f2bc2aba2534becbdf062eb993853a42bbbc282083d0daf9b4b585bd401aa8c9022100b1d7fd7ee0b95600db8535bbf331b19eed8d961f7a8e54159c53675d5f69df8c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff03ad0e58ccdac3df9dc28a218bcf6f1997b0a93306faaa4b3a28ae83447b2179010000008b483045022100be12b2937179da88599e27bb31c3525097a07cdb52422d165b3ca2f2020ffcf702200971b51f853a53d644ebae9ec8f3512e442b1bcb6c315a5b491d119d10624c83014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff2acfcab629bbc8685792603762c921580030ba144af553d271716a95089e107b010000008b483045022100fa579a840ac258871365dd48cd7552f96c8eea69bd00d84f05b283a0dab311e102207e3c0ee9234814cfbb1b659b83671618f45abc1326b9edcc77d552a4f2a805c0014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffdcdc6023bbc9944a658ddc588e61eacb737ddf0a3cd24f113b5a8634c517fcd2000000008b4830450221008d6df731df5d32267954bd7d2dda2302b74c6c2a6aa5c0ca64ecbabc1af03c75022010e55c571d65da7701ae2da1956c442df81bbf076cdbac25133f99d98a9ed34c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffe15557cd5ce258f479dfd6dc6514edf6d7ed5b21fcfa4a038fd69f06b83ac76e010000008b483045022023b3e0ab071eb11de2eb1cc3a67261b866f86bf6867d4558165f7c8c8aca2d86022100dc6e1f53a91de3efe8f63512850811f26284b62f850c70ca73ed5de8771fb451014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff01404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000010000000166d7577163c932b4f9690ca6a80b6e4eb001f0a2fa9023df5595602aae96ed8d000000008a4730440220262b42546302dfb654a229cefc86432b89628ff259dc87edd1154535b16a67e102207b4634c020a97c3e7bbd0d4d19da6aa2269ad9dded4026e896b213d73ca4b63f014104979b82d02226b3a4597523845754d44f13639e3bf2df5e82c6aab2bdc79687368b01b1ab8b19875ae3c90d661a3d0a33161dab29934edeb36aa01976be3baf8affffffff02404b4c00000000001976a9144854e695a02af0aeacb823ccbc272134561e0a1688ac40420f00000000001976a914abee93376d6b37b5c2940655a6fcaf1c8e74237988ac0000000001000000014e3f8ef2e91349a9059cb4f01e54ab2597c1387161d3da89919f7ea6acdbb371010000008c49304602210081f3183471a5ca22307c0800226f3ef9c353069e0773ac76bb580654d56aa523022100d4c56465bdc069060846f4fbf2f6b20520b2a80b08b168b31e66ddb9c694e240014104976c79848e18251612f8940875b2b08d06e6dc73b9840e8860c066b7e87432c477e9a59a453e71e6d76d5fe34058b800a098fc1740ce3012e8fc8a00c96af966ffffffff02c0e1e400000000001976a9144134e75a6fcb6042034aab5e18570cf1f844f54788ac404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000"_hex,
int64_t CAmount
Amount in satoshis (Can be negative).
static constexpr unsigned int DEFAULT_MISBEHAVING_BANTIME
const TranslateFn G_TRANSLATION_FUN
Translate string to current locale using Qt.
void SelectParams(const ChainType chain)
Sets the params returned by Params() to those for the given chain type.
const CChainParams & Params()
Return the currently selected parameters.
bool EnableFuzzDeterminism()
#define Assert(val)
Identity function.
@ ALLOW_ANY
disable validation
void AddArg(const std::string &name, const std::string &help, unsigned int flags, const OptionsCategory &cat)
Add argument.
std::list< std::function< void(conststd::string &)> >::iterator PushBackCallback(std::function< void(const std::string &)> fun) EXCLUSIVE_LOCKS_REQUIRED(!m_cs)
Connect a slot to the print signal and return the connection.
bool StartLogging() EXCLUSIVE_LOCKS_REQUIRED(!m_cs)
Start logging (and flush all buffered messages).
void DisconnectTestLogger() EXCLUSIVE_LOCKS_REQUIRED(!m_cs)
Only for testing.
std::vector< CTransactionRef > vtx
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
CCoinsView that adds a memory cache for transactions to another CCoinsView.
std::optional< Coin > GetCoin(const COutPoint &outpoint) const override
Abstract view on the open txout dataset.
An encapsulated private key.
An outpoint - a combination of a transaction hash and an index n into its vout.
Serialized script, used inside transaction inputs and outputs.
The basic transaction that is broadcasted on the network and contained in blocks.
An output of a transaction.
Chainstate stores and provides an API to update our local knowledge of the current best chain.
kernel::ChainstateManagerOpts Options
Double ended buffer combining vector and stream-like interfaces.
Fillable signing provider that keeps keys in an address->secret map.
virtual bool AddKey(const CKey &key)
static NetGroupManager NoAsmap()
static std::unique_ptr< PeerManager > make(CConnman &connman, AddrMan &addrman, BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool, node::Warnings &warnings, Options opts)
I randrange(I range) noexcept
Generate a random integer in the range [0..range), with range > 0.
std::string ToString() const
Generate a new block, without valid proof-of-work.
std::unique_ptr< CBlockTemplate > CreateNewBlock()
Construct a new block template.
Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-w...
kernel::BlockManagerOpts Options
void AddCoins(CCoinsViewCache &cache, const CTransaction &tx, int nHeight, bool check_for_overwrite)
static const int COINBASE_MATURITY
Coinbase transaction outputs can only be spent after this number of new blocks (network rule).
void ResetCoverageCounters()
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
bool TryCreateDirectories(const fs::path &p)
Ignores exceptions thrown by create_directories if the requested directory exists.
void UnlockDirectory(const fs::path &directory, const fs::path &lockfile_name)
std::string HexStr(const std::span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
Common init functions shared by bitcoin-node, bitcoin-wallet, etc.
void InitLogging(const ArgsManager &args)
Initialize global loggers.
bool AppInitParameterInteraction(const ArgsManager &args)
Initialization: parameter interaction.
ChainstateLoadResult LoadChainstate(ChainstateManager &chainman, const CacheSizes &cache_sizes, const ChainstateLoadOptions &options)
ChainstateLoadResult VerifyLoadedChainstate(ChainstateManager &chainman, const ChainstateLoadOptions &options)
void SetupServerArgs(ArgsManager &argsman, bool can_listen_ipc)
Register all arguments with the ArgsManager.
BCLog::Logger & LogInstance()
util::Result< void > ApplyArgsManOptions(const ArgsManager &argsman, const CChainParams &chainparams, MemPoolOptions &mempool_opts)
Overlay the options set in argsman on top of corresponding members in mempool_opts.
std::unique_ptr< Chain > MakeChain(node::NodeContext &node)
Return implementation of Chain interface.
void RegenerateCommitments(CBlock &block, ChainstateManager &chainman)
Update an old GenerateCoinbaseCommitment from CreateNewBlock after the block txs have changed.
util::Result< void > ApplyArgsManOptions(const ArgsManager &args, BlockManager::Options &opts)
ChainstateLoadResult LoadChainstate(ChainstateManager &chainman, const CacheSizes &cache_sizes, const ChainstateLoadOptions &options)
ChainstateLoadResult VerifyLoadedChainstate(ChainstateManager &chainman, const ChainstateLoadOptions &options)
""_hex is a compile-time user-defined literal returning a std::array<std::byte>, equivalent to ParseH...
void ThreadRename(const std::string &)
void TraceThread(std::string_view thread_name, std::function< void()> thread_func)
A wrapper for do-something-once thread functions.
LockResult LockDirectory(const fs::path &directory, const fs::path &lockfile_name, bool probe_only)
ReachableNets g_reachable_nets
int64_t GetVirtualTransactionSize(int64_t nWeight, int64_t nSigOpCost, unsigned int bytes_per_sigop)
Compute the virtual transaction size (weight reinterpreted as bytes).
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params ¶ms)
Check whether a block hash satisfies the proof-of-work requirement specified by nBits.
static constexpr TransactionSerParams TX_WITH_WITNESS
static CTransactionRef MakeTransactionRef(Tx &&txIn)
std::shared_ptr< const CTransaction > CTransactionRef
std::atomic< bool > g_used_g_prng
void SignTransaction(CMutableTransaction &mtx, const SigningProvider *keystore, const std::map< COutPoint, Coin > &coins, const UniValue &hashType, UniValue &result)
Sign a transaction with the given keystore and previous transactions.
static void RegisterAllCoreRPCCommands(CRPCTable &t)
void RegenerateCommitments(CBlock &block, ChainstateManager &chainman)
Update an old GenerateCoinbaseCommitment from CreateNewBlock after the block txs have changed.
std::vector< unsigned char > ToByteVector(const T &in)
void SetRPCWarmupStarting()
static const bool g_rng_temp_path_init
static void ExitFailure(std::string_view str_err)
Test setup failure.
constexpr auto TEST_DIR_PATH_ELEMENT
void SetupCommonTestArgs(ArgsManager &argsman)
Register common test args.
static NetworkSetup g_networksetup_instance
static FastRandomContext g_rng_temp_path
Random context to get unique temp data dirs.
const std::function< void(const std::string &)> G_TEST_LOG_FUN
This is connected to the logger.
void SetupCommonTestArgs(ArgsManager &argsman)
Register common test args.
const std::function< std::vector< const char * >()> G_TEST_COMMAND_LINE_ARGUMENTS
Retrieve the command line arguments.
const std::function< std::string()> G_TEST_GET_FULL_NAME
Retrieve the unit test name.
ArgsManager m_args
Test-specific arguments and settings.
bool m_has_custom_datadir
BasicTestingSetup(ChainType chainType=ChainType::MAIN, TestOpts={})
void SeedRandomForTest(SeedRand seed)
Seed the global RNG state and m_rng for testing and log the seed value.
util::SignalInterrupt m_interrupt
NetEventsInterface * m_msgproc
A mutable version of CTransaction.
std::vector< CTxOut > vout
ChainTestingSetup(ChainType chainType=ChainType::MAIN, TestOpts={})
kernel::CacheSizes m_kernel_cache_sizes
bool m_block_tree_db_in_memory
std::function< void()> m_make_chainman
void LoadVerifyActivateChainstate()
bool m_coins_db_in_memory
Application-specific storage settings.
Validation result for a transaction evaluated by MemPoolAccept (single or package).
const ResultType m_result_type
Result type.
void mineBlocks(int num_blocks)
Mine a series of new blocks on the active chain.
std::vector< CTransactionRef > m_coinbase_txns
CMutableTransaction CreateValidMempoolTransaction(const std::vector< CTransactionRef > &input_transactions, const std::vector< COutPoint > &inputs, int input_height, const std::vector< CKey > &input_signing_keys, const std::vector< CTxOut > &outputs, bool submit=true)
Create a transaction and, optionally, submit to the mempool.
std::pair< CMutableTransaction, CAmount > CreateValidTransaction(const std::vector< CTransactionRef > &input_transactions, const std::vector< COutPoint > &inputs, int input_height, const std::vector< CKey > &input_signing_keys, const std::vector< CTxOut > &outputs, const std::optional< CFeeRate > &feerate, const std::optional< uint32_t > &fee_output)
Create a transaction, optionally setting the fee based on the feerate.
TestChain100Setup(ChainType chain_type=ChainType::REGTEST, TestOpts={})
std::vector< CTransactionRef > PopulateMempool(FastRandomContext &det_rand, size_t num_transactions, bool submit)
Create transactions spending from m_coinbase_txns.
CBlock CreateAndProcessBlock(const std::vector< CMutableTransaction > &txns, const CScript &scriptPubKey, Chainstate *chainstate=nullptr)
Create a new block with just given transactions, coinbase paying to scriptPubKey, and try to add it t...
CBlock CreateBlock(const std::vector< CMutableTransaction > &txns, const CScript &scriptPubKey, Chainstate &chainstate)
Create a new block with just given transactions, coinbase paying to scriptPubKey.
bool min_validation_cache
bool block_tree_db_in_memory
std::vector< const char * > extra_args
bool setup_validation_interface
TestingSetup(ChainType chainType=ChainType::MAIN, TestOpts={})
size_t signature_cache_bytes
Notifications & notifications
const CChainParams & chainparams
size_t script_execution_cache_bytes
bool include_dummy_extranonce
Whether to include an OP_0 as a dummy extraNonce in the template's coinbase.
CScript coinbase_output_script
Script to put in the coinbase transaction.
bool require_full_verification
This header provides an interface and simple implementation for a task runner.
@ FIXED_SEED
Seed with a fixed value that never changes over the lifetime of this process.
CTxMemPool::Options MemPoolOptionsForTest(const NodeContext &node)
std::function< std::string(const char *)> TranslateFn
Translate a message to the native language of the user.
static constexpr uint32_t MAX_BIP125_RBF_SEQUENCE
int64_t GetTime()
DEPRECATED Use either ClockType::now() or Now<TimePointType>() if a cast is needed.
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
static constexpr int DEFAULT_CHECKLEVEL
static const signed int DEFAULT_CHECKBLOCKS
V Cat(V v1, V &&v2)
Concatenate two vectors, moving elements.