13 #include <chainparams.h>
110 std::cerr << str_err << std::endl;
119 std::vector<const char*> arguments =
Cat(
123 "-logsourcelocations",
128 "-debugexclude=libevent",
129 "-debugexclude=leveldb",
143 throw std::runtime_error{error};
156 if (root_dir.empty())
ExitFailure(
"-testdatadir argument is empty, please specify a path");
174 std::cout <<
"Test directory (will not be deleted): " <<
m_path_root << std::endl;
194 static bool noui_connected =
false;
195 if (!noui_connected) {
197 noui_connected =
true;
237 .check_block_index =
true,
240 .worker_threads_num = 2,
242 const BlockManager::Options blockman_opts{
243 .chainparams = chainman_opts.chainparams,
245 .notifications = chainman_opts.notifications,
251 .memory_only =
true});
279 options.
prune = chainman.m_blockman.IsPruneMode();
290 if (!chainman.ActiveChainstate().ActivateBestChain(state)) {
291 throw std::runtime_error(
strprintf(
"ActivateBestChain failed. (%s)", state.
ToString()));
297 const std::vector<const char*>& extra_args,
298 const bool coins_db_in_memory,
299 const bool block_tree_db_in_memory)
332 const std::vector<const char*>& extra_args,
333 const bool coins_db_in_memory,
334 const bool block_tree_db_in_memory)
338 constexpr std::array<unsigned char, 32> vchKey = {
339 {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}};
348 m_node.
chainman->ActiveChain().Tip()->GetBlockHash().ToString() ==
349 "571d80a9967ae599cec0448b0b0ba1cfb606f584d8069bd7166b86854ba7a191");
356 for (
int i = 0; i < num_blocks; i++) {
357 std::vector<CMutableTransaction> noTxns;
365 const std::vector<CMutableTransaction>& txns,
383 const std::vector<CMutableTransaction>& txns,
392 std::shared_ptr<const CBlock> shared_pblock = std::make_shared<const CBlock>(block);
399 const std::vector<COutPoint>& inputs,
401 const std::vector<CKey>& input_signing_keys,
402 const std::vector<CTxOut>& outputs,
403 const std::optional<CFeeRate>& feerate,
404 const std::optional<uint32_t>& fee_output)
407 mempool_txn.
vin.reserve(inputs.size());
408 mempool_txn.
vout.reserve(outputs.size());
410 for (
const auto& outpoint : inputs) {
413 mempool_txn.
vout = outputs;
417 for (
const auto& input_signing_key : input_signing_keys) {
418 keystore.
AddKey(input_signing_key);
423 for (
const auto& input_transaction : input_transactions) {
424 AddCoins(coins_cache, *input_transaction.get(), input_height);
427 std::map<COutPoint, Coin> input_coins;
429 for (
const auto& outpoint_to_spend : inputs) {
432 assert(coins_cache.
GetCoin(outpoint_to_spend, utxo_to_spend));
433 input_coins.insert({outpoint_to_spend, utxo_to_spend});
434 inputs_amount += utxo_to_spend.
out.
nValue;
438 std::map<int, bilingual_str> input_errors;
440 CAmount current_fee = inputs_amount - std::accumulate(outputs.begin(), outputs.end(),
CAmount(0),
442 return acc +
out.nValue;
445 if (feerate.has_value()) {
446 assert(fee_output.has_value());
447 assert(fee_output.value() < mempool_txn.
vout.size());
449 CAmount deduction = target_fee - current_fee;
453 mempool_txn.
vout[fee_output.value()].nValue -= deduction;
455 input_errors.clear();
457 current_fee = target_fee;
460 return {mempool_txn, current_fee};
464 const std::vector<COutPoint>& inputs,
466 const std::vector<CKey>& input_signing_keys,
467 const std::vector<CTxOut>& outputs,
483 CKey input_signing_key,
488 COutPoint input{input_transaction->GetHash(), input_vout};
489 CTxOut output{output_amount, output_destination};
500 std::vector<CTransactionRef> mempool_transactions;
501 std::deque<std::pair<COutPoint, CAmount>> unspent_prevouts;
503 [](
const auto& tx){ return std::make_pair(COutPoint(tx->GetHash(), 0), tx->vout[0].nValue); });
504 while (num_transactions > 0 && !unspent_prevouts.empty()) {
507 const size_t num_inputs = det_rand.
randrange(24) + 1;
509 for (
size_t n{0}; n < num_inputs; ++n) {
510 if (unspent_prevouts.empty())
break;
511 const auto& [prevout, amount] = unspent_prevouts.front();
514 unspent_prevouts.pop_front();
516 const size_t num_outputs = det_rand.
randrange(24) + 1;
518 const CAmount amount_per_output = (total_in - fee) / num_outputs;
519 for (
size_t n{0}; n < num_outputs; ++n) {
521 mtx.
vout.emplace_back(amount_per_output, spk);
524 mempool_transactions.push_back(ptx);
525 if (amount_per_output > 3000) {
529 for (
size_t n{0}; n < num_outputs; ++n) {
530 unspent_prevouts.emplace_back(
COutPoint(ptx->GetHash(), n), amount_per_output);
531 std::swap(unspent_prevouts.back(), unspent_prevouts[det_rand.
randrange(unspent_prevouts.size())]);
543 return mempool_transactions;
581 ParseHex(
"0100000090f0a9f110702f808219ebea1173056042a714bad51b916cb6800000000000005275289558f51c9966699404ae2294730c3c9f9bda53523ce50e9b95e558da2fdb261b4d4c86041b1ab1bf930901000000010000000000000000000000000000000000000000000000000000000000000000ffffffff07044c86041b0146ffffffff0100f2052a01000000434104e18f7afbe4721580e81e8414fc8c24d7cfacf254bb5c7b949450c3e997c2dc1242487a8169507b631eb3771f2b425483fb13102c4eb5d858eef260fe70fbfae0ac00000000010000000196608ccbafa16abada902780da4dc35dafd7af05fa0da08cf833575f8cf9e836000000004a493046022100dab24889213caf43ae6adc41cf1c9396c08240c199f5225acf45416330fd7dbd022100fe37900e0644bf574493a07fc5edba06dbc07c311b947520c2d514bc5725dcb401ffffffff0100f2052a010000001976a914f15d1921f52e4007b146dfa60f369ed2fc393ce288ac000000000100000001fb766c1288458c2bafcfec81e48b24d98ec706de6b8af7c4e3c29419bfacb56d000000008c493046022100f268ba165ce0ad2e6d93f089cfcd3785de5c963bb5ea6b8c1b23f1ce3e517b9f022100da7c0f21adc6c401887f2bfd1922f11d76159cbc597fbd756a23dcbb00f4d7290141042b4e8625a96127826915a5b109852636ad0da753c9e1d5606a50480cd0c40f1f8b8d898235e571fe9357d9ec842bc4bba1827daaf4de06d71844d0057707966affffffff0280969800000000001976a9146963907531db72d0ed1a0cfb471ccb63923446f388ac80d6e34c000000001976a914f0688ba1c0d1ce182c7af6741e02658c7d4dfcd388ac000000000100000002c40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff010000008b483045022100f7edfd4b0aac404e5bab4fd3889e0c6c41aa8d0e6fa122316f68eddd0a65013902205b09cc8b2d56e1cd1f7f2fafd60a129ed94504c4ac7bdc67b56fe67512658b3e014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffffca5065ff9617cbcba45eb23726df6498a9b9cafed4f54cbab9d227b0035ddefb000000008a473044022068010362a13c7f9919fa832b2dee4e788f61f6f5d344a7c2a0da6ae740605658022006d1af525b9a14a35c003b78b72bd59738cd676f845d1ff3fc25049e01003614014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffff01001ec4110200000043410469ab4181eceb28985b9b4e895c13fa5e68d85761b7eee311db5addef76fa8621865134a221bd01f28ec9999ee3e021e60766e9d1f3458c115fb28650605f11c9ac000000000100000001cdaf2f758e91c514655e2dc50633d1e4c84989f8aa90a0dbc883f0d23ed5c2fa010000008b48304502207ab51be6f12a1962ba0aaaf24a20e0b69b27a94fac5adf45aa7d2d18ffd9236102210086ae728b370e5329eead9accd880d0cb070aea0c96255fae6c4f1ddcce1fd56e014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff02404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac002d3101000000001976a9141befba0cdc1ad56529371864d9f6cb042faa06b588ac000000000100000001b4a47603e71b61bc3326efd90111bf02d2f549b067f4c4a8fa183b57a0f800cb010000008a4730440220177c37f9a505c3f1a1f0ce2da777c339bd8339ffa02c7cb41f0a5804f473c9230220585b25a2ee80eb59292e52b987dad92acb0c64eced92ed9ee105ad153cdb12d001410443bd44f683467e549dae7d20d1d79cbdb6df985c6e9c029c8d0c6cb46cc1a4d3cf7923c5021b27f7a0b562ada113bc85d5fda5a1b41e87fe6e8802817cf69996ffffffff0280651406000000001976a9145505614859643ab7b547cd7f1f5e7e2a12322d3788ac00aa0271000000001976a914ea4720a7a52fc166c55ff2298e07baf70ae67e1b88ac00000000010000000586c62cd602d219bb60edb14a3e204de0705176f9022fe49a538054fb14abb49e010000008c493046022100f2bc2aba2534becbdf062eb993853a42bbbc282083d0daf9b4b585bd401aa8c9022100b1d7fd7ee0b95600db8535bbf331b19eed8d961f7a8e54159c53675d5f69df8c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff03ad0e58ccdac3df9dc28a218bcf6f1997b0a93306faaa4b3a28ae83447b2179010000008b483045022100be12b2937179da88599e27bb31c3525097a07cdb52422d165b3ca2f2020ffcf702200971b51f853a53d644ebae9ec8f3512e442b1bcb6c315a5b491d119d10624c83014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff2acfcab629bbc8685792603762c921580030ba144af553d271716a95089e107b010000008b483045022100fa579a840ac258871365dd48cd7552f96c8eea69bd00d84f05b283a0dab311e102207e3c0ee9234814cfbb1b659b83671618f45abc1326b9edcc77d552a4f2a805c0014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffdcdc6023bbc9944a658ddc588e61eacb737ddf0a3cd24f113b5a8634c517fcd2000000008b4830450221008d6df731df5d32267954bd7d2dda2302b74c6c2a6aa5c0ca64ecbabc1af03c75022010e55c571d65da7701ae2da1956c442df81bbf076cdbac25133f99d98a9ed34c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffe15557cd5ce258f479dfd6dc6514edf6d7ed5b21fcfa4a038fd69f06b83ac76e010000008b483045022023b3e0ab071eb11de2eb1cc3a67261b866f86bf6867d4558165f7c8c8aca2d86022100dc6e1f53a91de3efe8f63512850811f26284b62f850c70ca73ed5de8771fb451014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff01404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000010000000166d7577163c932b4f9690ca6a80b6e4eb001f0a2fa9023df5595602aae96ed8d000000008a4730440220262b42546302dfb654a229cefc86432b89628ff259dc87edd1154535b16a67e102207b4634c020a97c3e7bbd0d4d19da6aa2269ad9dded4026e896b213d73ca4b63f014104979b82d02226b3a4597523845754d44f13639e3bf2df5e82c6aab2bdc79687368b01b1ab8b19875ae3c90d661a3d0a33161dab29934edeb36aa01976be3baf8affffffff02404b4c00000000001976a9144854e695a02af0aeacb823ccbc272134561e0a1688ac40420f00000000001976a914abee93376d6b37b5c2940655a6fcaf1c8e74237988ac0000000001000000014e3f8ef2e91349a9059cb4f01e54ab2597c1387161d3da89919f7ea6acdbb371010000008c49304602210081f3183471a5ca22307c0800226f3ef9c353069e0773ac76bb580654d56aa523022100d4c56465bdc069060846f4fbf2f6b20520b2a80b08b168b31e66ddb9c694e240014104976c79848e18251612f8940875b2b08d06e6dc73b9840e8860c066b7e87432c477e9a59a453e71e6d76d5fe34058b800a098fc1740ce3012e8fc8a00c96af966ffffffff02c0e1e400000000001976a9144134e75a6fcb6042034aab5e18570cf1f844f54788ac404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000"),
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
int64_t CAmount
Amount in satoshis (Can be negative)
static constexpr CAmount COIN
The amount of satoshis in one BTC.
static constexpr unsigned int DEFAULT_MISBEHAVING_BANTIME
const std::function< void(const std::string &)> G_TEST_LOG_FUN
This is connected to the logger.
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.
const CChainParams & Params()
Return the currently selected parameters.
void SelectParams(const ChainType chain)
Sets the params returned by Params() to those for the given chain type.
#define Assert(val)
Identity function.
@ ALLOW_ANY
disable validation
void ForceSetArg(const std::string &strArg, const std::string &strValue)
bool ParseParameters(int argc, const char *const argv[], std::string &error)
fs::path GetDataDirNet() const
Get data directory path with appended network identifier.
void ClearPathCache()
Clear cached directory paths.
bool IsArgSet(const std::string &strArg) const
Return true if the given argument has been manually set.
int64_t GetIntArg(const std::string &strArg, int64_t nDefault) const
Return integer argument or default value.
void ClearArgs()
Clear available arguments.
fs::path GetDataDirBase() const
Get data directory path.
fs::path GetBlocksDirPath() const
Get blocks directory path.
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
void AddArg(const std::string &name, const std::string &help, unsigned int flags, const OptionsCategory &cat)
Add argument.
fs::path GetPathArg(std::string arg, const fs::path &default_value={}) const
Return path argument or default value.
void DisconnectTestLogger()
Only for testing.
std::list< std::function< void(const std::string &)> >::iterator PushBackCallback(std::function< void(const std::string &)> fun)
Connect a slot to the print signal and return the connection.
bool StartLogging()
Start logging (and flush all buffered messages)
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.
bool GetCoin(const COutPoint &outpoint, Coin &coin) const override
Retrieve the Coin (unspent transaction output) for a given outpoint.
Abstract view on the open txout dataset.
Fee rate in satoshis per kilovirtualbyte: CAmount / kvB.
CAmount GetFee(uint32_t num_bytes) const
Return the fee in satoshis for the given vsize in vbytes.
An encapsulated private key.
CPubKey GetPubKey() const
Compute the public key from a private key.
void Set(const T pbegin, const T pend, bool fCompressedIn)
Initialize using begin and end iterators to byte data.
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.
CTxMemPoolEntry stores data about the corresponding transaction, as well as data about all in-mempool...
An output of a transaction.
Chainstate stores and provides an API to update our local knowledge of the current best chain.
CTxOut out
unspent transaction output
Double ended buffer combining vector and stream-like interfaces.
uint256 rand256() noexcept
generate a random uint256.
uint64_t randrange(uint64_t range) noexcept
Generate a random integer in the range [0..range).
Fillable signing provider that keeps keys in an address->secret map.
virtual bool AddKey(const CKey &key)
static std::unique_ptr< PeerManager > make(CConnman &connman, AddrMan &addrman, BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool, Options opts)
std::string ToString() const
std::string ToString() const
Path class wrapper to block calls to the fs::path(std::string) implicit constructor and the fs::path:...
Access to the block database (blocks/index/)
Generate a new block, without valid proof-of-work.
Maintains a tree of blocks (stored in m_block_index) which is consulted to determine where the most-w...
static transaction_identifier FromUint256(const uint256 &id)
void AddCoins(CCoinsViewCache &cache, const CTransaction &tx, int nHeight, bool check_for_overwrite)
Utility function to add all of a transaction's outputs to a cache.
static const int COINBASE_MATURITY
Coinbase transaction outputs can only be spent after this number of new blocks (network rule)
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
fs::path FeeestPath(const ArgsManager &argsman)
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)
Common init functions shared by bitcoin-node, bitcoin-wallet, etc.
void InitLogging(const ArgsManager &args)
Initialize global loggers.
void SetupServerArgs(ArgsManager &argsman)
Register all arguments with the ArgsManager.
bool AppInitParameterInteraction(const ArgsManager &args)
Initialization: parameter interaction.
BCLog::Logger & LogInstance()
static path absolute(const path &p)
static std::string PathToString(const path &path)
Convert path object to a byte string.
static path PathFromString(const std::string &string)
Convert byte string to path object.
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.
CacheSizes CalculateCacheSizes(const ArgsManager &args, size_t n_indexes)
util::Result< void > ApplyArgsManOptions(const ArgsManager &args, BlockManager::Options &opts)
ChainstateLoadResult LoadChainstate(ChainstateManager &chainman, const CacheSizes &cache_sizes, const ChainstateLoadOptions &options)
This sequence can have 4 types of outcomes:
ChainstateLoadResult VerifyLoadedChainstate(ChainstateManager &chainman, const ChainstateLoadOptions &options)
std::atomic_bool fReindex
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)
void ThreadRename(std::string &&)
Rename a thread both in terms of an internal (in-memory) name as well as its system thread name.
static constexpr bool DEFAULT_ACCEPT_STALE_FEE_ESTIMATES
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
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)
std::vector< unsigned char > ToByteVector(const T &in)
std::ostream & operator<<(std::ostream &os, const uint256 &num)
static void ExitFailure(std::string_view str_err)
Test setup failure.
const std::function< std::string(const char *)> G_TRANSLATION_FUN
Translate string to current locale using Qt.
static void SetupUnitTestArgs(ArgsManager &argsman)
Register test-only arguments.
static FastRandomContext g_insecure_rand_ctx_temp_path
Random context to get unique temp data dirs.
static NetworkSetup g_networksetup_instance
bool InitSignatureCache(size_t max_size_bytes)
std::vector< Byte > ParseHex(std::string_view hex_str)
Like TryParseHex, but returns an empty vector on invalid input.
bool m_has_custom_datadir
BasicTestingSetup(const ChainType chainType=ChainType::MAIN, const std::vector< const char * > &extra_args={})
util::SignalInterrupt m_interrupt
NetEventsInterface * m_msgproc
A mutable version of CTransaction.
std::vector< CTxOut > vout
Testing setup that performs all steps up until right before ChainstateManager gets initialized.
ChainTestingSetup(const ChainType chainType=ChainType::MAIN, const std::vector< const char * > &extra_args={})
bool m_block_tree_db_in_memory
node::CacheSizes m_cache_sizes
void LoadVerifyActivateChainstate()
bool m_coins_db_in_memory
Application-specific storage settings.
fs::path path
Location in the filesystem where leveldb data will be stored.
Validation result for a transaction evaluated by MemPoolAccept (single or package).
const ResultType m_result_type
Result type.
bool deterministic_rng
Whether or not the internal RNG behaves deterministically (this is a test-only option).
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(const ChainType chain_type=ChainType::REGTEST, const std::vector< const char * > &extra_args={}, const bool coins_db_in_memory=true, const bool block_tree_db_in_memory=true)
std::vector< CTransactionRef > PopulateMempool(FastRandomContext &det_rand, size_t num_transactions, bool submit)
Create transactions spending from m_coinbase_txns.
void MockMempoolMinFee(const CFeeRate &target_feerate)
Mock the mempool minimum feerate by adding a transaction and calling TrimToSize(0),...
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.
Testing setup that configures a complete environment.
TestingSetup(const ChainType chainType=ChainType::MAIN, const std::vector< const char * > &extra_args={}, const bool coins_db_in_memory=true, const bool block_tree_db_in_memory=true)
An options struct for ChainstateManager, more ergonomically referred to as ChainstateManager::Options...
const CChainParams & chainparams
bool require_full_verification
Setting require_full_verification to true will require all checks at check_level (below) to succeed f...
bool block_tree_db_in_memory
std::unique_ptr< ValidationSignals > validation_signals
Issues calls about blocks and transactions.
std::unique_ptr< CConnman > connman
std::unique_ptr< kernel::Context > kernel
libbitcoin_kernel context
std::unique_ptr< CTxMemPool > mempool
std::unique_ptr< BanMan > banman
std::unique_ptr< AddrMan > addrman
std::unique_ptr< ChainstateManager > chainman
std::unique_ptr< KernelNotifications > notifications
Issues blocking calls about sync status, errors and warnings.
std::unique_ptr< CScheduler > scheduler
std::unique_ptr< CBlockPolicyEstimator > fee_estimator
std::unique_ptr< PeerManager > peerman
std::atomic< int > exit_status
std::unique_ptr< const NetGroupManager > netgroupman
util::SignalInterrupt * shutdown
Interrupt object used to track whether node shutdown was requested.
std::unique_ptr< interfaces::Chain > chain
FastRandomContext g_insecure_rand_ctx
This global and the helpers that use it are not thread-safe.
static void SeedInsecureRand(SeedRand seed=SeedRand::SEED)
CTxMemPool::Options MemPoolOptionsForTest(const NodeContext &node)
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
static constexpr uint32_t MAX_BIP125_RBF_SEQUENCE
bool InitScriptExecutionCache(size_t max_size_bytes)
Initializes the script-execution cache.
static constexpr int DEFAULT_CHECKLEVEL
static const signed int DEFAULT_CHECKBLOCKS
V Cat(V v1, V &&v2)
Concatenate two vectors, moving elements.